我有一个查询,用于识别具有父关系的树中的节点。这个查询有什么问题?即使我有内部节点,相应的 case 语句也永远不会被执行。我总是得到叶节点或根节点的结果。永远不要在输出中获得 Inner 。我可能做错了什么?



样本输入

N P
1 2
3 2
6 8
9 8
2 5
8 5
5 NULL

样本输出
1 Leaf
2 Inner
3 Leaf
5 Root
6 Leaf
8 Inner
9 Leaf

最佳答案

为什么要建hier?请注意,如果这是锯齿状层次结构,则 Max(Level) 不一定有效。例如,叶节点是级别 3,但最大级别是 6。

Declare @YourTable table (N int,P int)
Insert Into @YourTable values
(1, 2),
(3, 2),
(6, 8),
(9, 8),
(2, 5),
(8, 5),
(5, NULL)

Select A.*
      ,Lvl = case when A.P is null then 'Root' else case when B.P is null then 'Leaf' else 'Inner' end end
 From  @YourTable A
 Left Join  (Select Distinct P from @YourTable) B on A.N=B.P

退货
N   P   Lvl
1   2   Leaf
3   2   Leaf
6   8   Leaf
9   8   Leaf
2   5   Inner
8   5   Inner
5   NULL    Root

关于SQL CASE 语句具体示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40061652/

10-11 04:58