SQL mehrere SELECT-Abfrage mit der xmlagg-Funktion - Daten nicht gezogen in der gewünschten Weise
Meine Daten in Oracle ist so etwas wie das
NAME | DEP_VALUE | ID_DEP
Amy 1 AA1234
Bob 2 BB4321
Clara 1 CC5678
Clara 2 CC7890
John 1 JJ6543
John 2 JJ7865
John 3 JJ7654
Tom 1 TT0987
Tom 2 TT6541
Tom 3 TT4087
Tom 4 TT3409
Ich brauche die Daten gezogen werden, die in dieser Weise
NAME | DEP_VALUE | ID_DEP
Amy 1 AA1234
Bob 2 BB4321
Clara 1;2 CC5678;CC7890
John 1;2;3 JJ6543;JJ7865;JJ7654
Tom 1;2;3;4 TT0987;TT6541;TT4087;TT3409
Meine Abfrage lautet wie folgt
SELECT name,
Rtrim(Xmlagg (Xmlelement (e, dep_value
|| ';')).extract ( '//text()' ), ','),
Rtrim(Xmlagg (Xmlelement (e, id_dep
|| ';')).extract ( '//text()' ), ',')
FROM (SELECT emp_name,
dep.dep_value,
dep.id_dep
FROM emp
inner join dep
ON emp.name = dep.name
WHERE id_name IN (SELECT name
FROM altname
WHERE id_emp IN (SELECT id_emp
FROM cnames
WHERE emp_lvl LIKE '%GGG%')))
GROUP BY name,
dep_value
Das Ergebnis, das angezeigt wird
NAME | DEP_VALUE | ID_DEP
Amy 1; AA1234;
Bob 2; BB4321;
Clara 1; CC5678;
Clara 2; CC7890;
John 1; JJ6543;
John 2; JJ7865;
John 3; JJ7654;
Tom 1; TT0987;
Tom 2; TT6541;
Tom 3; TT4087;
Tom 4; TT3409;
Wie kann ich ziehen Sie die Daten wie in der 2. Tabelle? Was ist der Fehler in meiner sql-Abfrage?
InformationsquelleAutor Raghu | 2012-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie Sie wollen
GROUP BY name
eher alsGROUP BY name, dep_value
Eine weitere Sache. In die obige Abfrage den Teil "extract( '//text()' ), ',')" sollte eigentlich "extract( '//text()' ), ';')".Ansonsten ist die id_dep Aussehen wird JJ6543;JJ7865;JJ7654; statt JJ6543;JJ7865;JJ7654. Gibt es ein extra ein ";" Ergebnis.
Guter Punkt. Aktualisiert meine Antwort.
InformationsquelleAutor Justin Cave
Nur zur weiteren Erklärung, xmlagg, und fügen Sie eine andere option mit Oracle 11g.
http://www.dba-oracle.com/t_display_multiple_column_values_same_rows.htm
Ausgabe:
InformationsquelleAutor gaps96
Versuchen, wie dies einfacher
Hinweis: Sie müssen beschränken Sie Ihre dep_value Länge und Sie können Ihre Annahme, weil Sie nicht bekommen kann Ihre Zeichenfolge Ergebnis zu lang, hoffe, das wird helfen, Ihre job
Verwenden Sie nicht
WM_CONCAT
es ist nicht dokumentiert und ist entfernt von den späteren Versionen von Oracle.InformationsquelleAutor rahmad76