Basiert in der Lösung, wenn dieses Problem - Shuffle a column between rows - Ich muss auf diese eine neue Bedingung anwenden: die Namen müssen das Geschlecht garantieren: männlich, weiblich oder unbekannt.Oracle Shuffle Spalten in Zeilen
Also, meine Tabelle haben eine Spalte mit dem Namen gender
. Ich muss die Spalten mit dem gleichen Geschlecht mischen.
Ich habe dies versucht, aber in einigen Fällen ich das Geschlecht nicht garantieren kann
merge into original_table o
using (
with
helper (id, gender, rn, rand_rn) as (
select id,
gender,
row_number() over (order by id),
row_number() over (order by dbms_random.value())
from original_table
)
select ot.name, ot.gender, h2.id
from original_table ot inner join helper h1 on (ot.id = h1.id and ot.gender = h1.gender)
inner join helper h2 on h1.rand_rn = h2.rn
) p
on (o.id = p.id)
when matched then update set o.name = p.name
;
Und in Fällen, dass das Geschlecht nicht verfügbar ist (ist Null-Wert), für Namen Beispiel Unternehmen, diese Zusammenführung nichts aktualisieren .
Ich kann diese Abfrage in 3 verschiedenen Merge-Anweisung teilen. Eines für jedes Geschlecht, das ich habe. Aber ich suche nach einer besseren und einfacheren Aussage. Weil ich dieselbe Lösung in einem anderen Kontext und mit anderen Bedingungen anwenden muss. Danke.
EDIT: Beispieldaten
ID GENDER NAME
3721 M MARK
3722 M JUSTIN
3723 F RUTH
3724 F MARY
3725 F ANNE
4639 CAMPANY SA
4640 M JOHN
4641 M LUCAS
4642 COMPANY HOLDER SA
Eine mögliche Lösung:
ID GENDER NAME
3721 M LUCAS
3722 M JOHN
3723 F MARY
3724 F ANNE
3725 F RUTH
4639 CAMPANY HOLDER SA
4640 M MARK
4641 M JUSTIN
4642 COMPANY SA
Können Sie eine Probe von Daten zeigen, und gewünschte Ergebnis? –
Beispieldaten hinzugefügt. Ich muss die Namen nach Geschlecht mischen. – milheiros
Ich bin neugierig, warum Sie das tun müssen? – BobC