确定层次关系,但相反

时间:2014-12-28 18:43:49

标签: sql oracle

考虑Oracle中的下表

sortOrder           thisID              levelNo
------------------- ------------------- ---------------------
1                   A                   0
2                   B                   1
3                   C                   1
4                   D                   2
5                   E                   3
6                   F                   3
7                   G                   1
8                   H                   0
9                   I                   1

可以在视觉上看作

A
 B
 C
  D
   E
   F
 G
H
 I

如何确定子父关系,输出以下内容?该关系基于sortOrder和levelNo。

thisID              parentID
------------------- ---------------------
A                   A
B                   A
C                   A
D                   C
E                   D
F                   D
G                   A
H                   H
I                   H

我熟悉使用查询来根据分层的父子关系来确定级别,但是却没有找到一种方法来反过来。

1 个答案:

答案 0 :(得分:1)

请尝试

SELECT
  T.thisID
  , CASE T.levelNo 
    WHEN 0 
         THEN T.thisID
    ELSE (
           SELECT thisID FROM Table1
           WHERE sortOrder = (
                               SELECT MAX(sortOrder) FROM Table1 
                               WHERE (levelNo = T.levelNo -  1) 
                                 AND sortOrder < T.sortOrder
                             )
         )
  END parent
FROM Table1 T
ORDER BY sortOrder;

查看实际操作:SQL Fiddle

如果需要进一步的细节/调整,请发表评论。

相关问题