我的来源如下
OSPID OSPNAME RELATEDOSPID
100004 LEVEL4 100003
100003 LEVEL3 100002
100002 LEVEL2 100001
100001 LEVEL1 0
100009 LEVEL4 100008
100008 LEVEL2 100007
我需要结果
L4OSPID L4OSPNAME L3RELATEDID L3OSPNAME L2RELATEDID L2OSPNAME L1RELATEDID L2OSPNAME ROOTNODE
100004 LEVEL4 100003 LEVEL3 100002 LEVEL2 100001 LEVEL1 0
100009 LEVEL4 100008 NULL NULL LEVEL2 100007 NULL NULL
如果缺少任何级别,则应将NULL
由于
答案 0 :(得分:0)
假设只有4个LEVEL并且你总是想从LEVEL4开始,这里是查询
select L4.OSPID as L4OSPID, L4.OSPNAME as L4OPSNAME,
L4.RELATEDOSPID
as L3RELATEDID,
case
WHEN L3.OSPNAME = 'LEVEL3' THEN L3.OSPNAME
ELSE NULL
end as L3OSPNAME,
case
WHEN L3.OSPNAME = 'LEVEL3' THEN L3.RELATEDOSPID
ELSE NULL
end as L2RELATEDID,
case
WHEN L3.OSPNAME = 'LEVEL2' THEN L3.OSPNAME
WHEN L2.OSPNAME = 'LEVEL2' THEN L2.OSPNAME
ELSE NULL
end as L2OSPNAME,
case WHEN L3.OSPNAME = 'LEVEL2' THEN L3.RELATEDOSPID
WHEN L2.OSPNAME = 'LEVEL2' THEN L2.RELATEDOSPID
ELSE NULL
end
as L1RELATEDID,
case
WHEN L3.OSPNAME = 'LEVEL1' THEN L3.OSPNAME
WHEN L2.OSPNAME = 'LEVEL1' THEN L2.OSPNAME
WHEN L1.OSPNAME = 'LEVEL1' THEN L1.OSPNAME
ELSE NULL
end as L1OSPNAME,
case
WHEN L3.OSPNAME = 'LEVEL1' THEN L3.RELATEDOSPID
WHEN L2.OSPNAME = 'LEVEL1' THEN L2.RELATEDOSPID
WHEN L1.OSPNAME = 'LEVEL1' THEN L1.RELATEDOSPID
ELSE NULL
end as ROOTNODE
from osptable as L4
left outer join osptable as L3
on L4.RELATEDOSPID = L3.OSPID
left outer join osptable as L2
on L3.RELATEDOSPID = L2.OSPID
left outer join osptable as L1
on L2.RELATEDOSPID = L1.OSPID
where L4.OSPNAME = 'LEVEL4'
这给了我这个结果,我认为这是理想的结果
100004 LEVEL4 100003 LEVEL3 100002 LEVEL2 100001 LEVEL1 0
100009 LEVEL4 100008 NULL NULL LEVEL2 100007 NULL NULL