Ich muss eine Zeichenfolge der Nummern 1-3 mit den Zahlen in zufälliger Reihenfolge für jede aus einer Tabelle ausgewählte Zeile generieren.Generieren einer Zeichenfolge in zufälliger Reihenfolge
Ich habe Folgendes versucht, bin aber nicht in der Lage, die Zufallszahlen für jede Zeile zu ändern (sie sind über alle Zeilen hinweg gleich).
SELECT name
, (SELECT LISTAGG(COLUMN_VALUE) WITHIN GROUP (ORDER BY dbms_random.value)
FROM TABLE(SYS.ODCIVARCHAR2LIST('1', '2', '3'))
) AS q_order
FROM tableA
Gewünschtes Ergebnis:
NAME Q_ORDER
-------------------
Name1 123
Name2 312
Name3 213
Was ich tatsächlich bekommen:
NAME Q_ORDER
-------------------
Name1 312
Name2 312
Name3 312
Version: Oracle 11.2.0
Müssen sie alle Permutationen von {1, 2, 3} sein? Das ist nicht völlig zufällig; wirklich zufällig sollte auch 233, 131 und sogar 222 und 333 erlauben. – mathguy
Und, wenn Sie wissen wollen, warum Ihr Versuch fehlschlug: Sie haben alle Zufälligkeit in einer Unterabfrage isoliert, die mit der äußeren Abfrage unkorreliert ist. Daher wird die Unterabfrage nur einmal berechnet, und derselbe Wert wird für jede Zeile in der äußeren Abfrage verwendet. Sie können erzwingen, dass die Unterabfrage korreliert wird, aber Sie erhalten eine sehr ineffiziente Implementierung Ihrer Anforderung. – mathguy