Heim >Datenbank >Oracle >So konvertieren Sie in Oracle mehrere Zeilen in eine

So konvertieren Sie in Oracle mehrere Zeilen in eine

WBOY
WBOYOriginal
2022-03-07 15:12:4622453Durchsuche

In Oracle können Sie die listagg-Funktion mit der „order by“-Klausel verwenden, um mehrere Zeilen in eine Zeile umzuwandeln. Diese Anweisung kann die Daten sortieren und dann die sortierten Ergebnisse zusammenfügen. Trennzeichen ') innerhalb der Gruppe (Reihenfolge nach Spaltenname)".

So konvertieren Sie in Oracle mehrere Zeilen in eine

Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle 11g-Version, Dell G3-Computer.

So konvertieren Sie mehrere Zeilen in Oracle in eine Zeile

Aufgrund des Bedarfs müssen die Unterorganisationen unter der erhaltenen Organisation in einer Datenzeile zusammengefasst werden, und Oracles eigene Funktion wird verwendet

listagg (Spaltenname , 'Trennzeichen') innerhalb der Gruppe (Reihenfolge nach Spaltenname)

Das heißt, innerhalb jeder Gruppe sortiert LISTAGG die Spalten gemäß der Reihenfolge-nach-Klausel und fügt die sortierten Ergebnisse zusammen

Meine Organisationsstruktur ist eine Baumstruktur, und das folgende SQL lautet: Es dient dazu, die Namen aller Unterabteilungen unter der aktuellen Abteilung abzufragen.

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4

Hinweis: Das obige SQL verwendet das Oracle-Schlüsselwort LEVEL, das angibt, auf welcher Ebene sich die Daten in der Baumstruktur befinden.
Das obige SQL verwendet auch die Oracle-Baumabfrageanweisung START WITH … CONNECT BY PRIOR …
Wenn die Abfrage alle sind die übergeordneten Knoten des Knotens, dann sollte das obige START WITH SQL wie folgt geändert werden:
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.PID = O.ORGID (Die Felder nach PRIOR stimmen nicht mit der vorherigen Reihenfolge überein)

ORGANIZATION-Tabellendaten lauten wie folgt

1201Klasse 201 1200
SELECT ORGNAME,LEVEL FROM ORGANIZATION 
START WITH ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID
Die Ausführungsergebnisse sind wie folgt: ORGNAMELEVELGrundschule1
ORGID ORGNAME PID
1000 Grundschule 0
1100 Erste Klasse 1000
1200 Zweite Klasse 1000
1101 Klasse 101
1.LEVEL

Erste Klasse

2

Zweite Klasse 2 Klasse 1013 Klasse 1023Klasse 103... 2. LISTAGG...INNERHALB DER GRUPPE...
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
Grundschule, erste Klasse, zweite Klasse, Klasse 101, Klasse 102, Klasse 103, Klasse 2013 Fügen Sie alle untergeordneten Knoten unter dem übergeordneten Knoten in eine Zeile ein
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
Die Ausführung Die Ergebnisse lauten wie folgt:Oracle Video Tutorial“
Die Ausführungsergebnisse sind wie folgt:
Grundschule, erste Klasse, zweite Klasse, Klasse 101, Klasse 102, Klasse 103, Klasse 201 Empfohlenes Tutorial: „

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie in Oracle mehrere Zeilen in eine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn