我有一个查询,用于识别具有父关系的树中的节点。这个查询有什么问题?即使我有内部节点,相应的 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/