我有這樣的Oracle 11g查詢:自參照表的SQL查詢來行
SELECT RPAD(' ', 2 * (T.ID_LEVEL - 1)) || T.IDE IDE, T.ID_LEVEL, T.CODE, T.FK_IDE
FROM TEST_DYNAMIC T
START WITH T.FK_IDE = 0
CONNECT BY NOCYCLE PRIOR T.IDE = T.FK_IDE
ORDER BY T.IDE,T.FK_IDE;
返回此數據:
IDE |IDE_LEVEL |CODE |FK_IDE |
-----|-----------|------|--------|
1 | 1|A01 | 0|
2 | 2|A01 | 1|
3 | 3|A01 | 2|
4| 4|A01 | 3|
5 | 2|A02 | 1|
6 | 2|A03 | 1|
7 | 3|A01 | 6|
8 | 1|A02 | 0|
正如你所看到的,是從自我refrencing表得到的數據,其中IDE_LEVEL列是包含此值(1,2,3,4)作爲PK的主表的外鍵,而IDE列是來自TEST_DYNAMIC表的自動增量PK。
有一種方法以該結果轉換爲這一個?:
IDE |CODE_LEVEL1 |CODE_LEVEL2 |CODE_LEVEL3 |CODE_LEVEL4 |
-----|-------------|-------------|-------------|-------------|
1 |A01 |A01 |A01 |A01 |
1 |A01 |A02 |NULL |NULL |
1 |A01 |A03 |A01 |NULL |
8 |A02 |NULL |NULL |NULL |
在預期的結果如上所述,IDE列被示出對應於在FK_COLUMN三個ocurrences關鍵1三次,和第一個結果集中鍵8的一次(這一個沒有子元素,因此必須顯示在結果集中)。
任何幫助將不勝感激。
查詢和數據結果是否正確? – itsols 2014-10-17 00:19:50
是的,他們是。 FK_IDE列用於父驗證。當爲0時,則其他root是來自另一個不是root的父節點的子節點。 – iperezmel78 2014-10-17 00:37:44
所以你想旋轉你當前的結果集?你正在使用哪個版本?這些是使用'case'的版本高達10g的例子,使用'pivot'向上的版本高達11g。 – 2014-10-17 07:19:31