我有这样的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