2017-12-05 2 views
2

ich eine Quelltabelle wie so haben:Zusammenführen von Daten aus Zeilen in Spalten

id | code | description | parent_code | level 
1 111  testone  null   1 
2 222  testtwo  null   1 
3 333  testthree 111   2 
4 444  testfour  222   2 

Was ich wie so mit dem Ergebnis in eine neue Tabelle muss hochladen:

id | codelevel1 | descriptionlevel1 | codeleve2 | descriptionlevel2 
1 111   testone    333  testthree 
2 222   testtwo    444  testfour 

Bitte beachten Sie, ich habe insgesamt 6 Ebenen, so in der Zieltabelle, habe ich ... CodeLevel6 BeschreibungLevel6 als die letzten beiden Spalten

Ich untersuchte die Verwendung von WITH AS rekursive Abfragen, aber bin derzeit fest, wie die Codelevel1 ... Codelevel6 fie lds werden für eine eindeutige bestehende ID ausgefüllt.

+0

Ich glaube, Sie suchen für PIVOT: https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-und-unpivot – Thomas

Antwort

2

Sie eine hierarchische Abfrage müssen alle Zeilen mit dem gleichen Wurzelelement zu bekommen und dann PIVOT verwenden, um die Daten zu transformieren:

SELECT * 
FROM 
(
    SELECT CONNECT_BY_ROOT id AS root_id, code, description, lvl 
    FROM t 
    CONNECT BY parent_code = PRIOR code 
    START WITH parent_code IS NULL 
) 
PIVOT 
(
    MIN(code) AS code, MIN(description) AS description 
    FOR lvl IN (1, 2, 3, 4, 5, 6) 
) 

Mit lvl IN (1, 2) dies zurück:

ROOT_ID  1_CODE 1_DESCRIPTION  2_CODE 2_DESCRIPTION 
---------- ---------- ------------- ---------- ------------- 
     1  111 testone    333 testthree  
     2  222 testtwo    444 testfour  
Verwandte Themen