Sql 如何透视此父子表?
我想寻求有关旋转此父子表的帮助 我的父子表:Sql 如何透视此父子表?,sql,sql-server,hierarchy,Sql,Sql Server,Hierarchy,我想寻求有关旋转此父子表的帮助 我的父子表: parent child ve1 vet12 ve1 vet13 vet12 adm1 vet13 adm2 adm2 xyz ve2 vy1 vx kit1 我想将父子表透视到此表中: level1 level2 level3 level4 ve1 vet12 adm1 ve1 vet13 adm2 xyz ve2 vy1 vx
parent child
ve1 vet12
ve1 vet13
vet12 adm1
vet13 adm2
adm2 xyz
ve2 vy1
vx kit1
我想将父子表透视到此表中:
level1 level2 level3 level4
ve1 vet12 adm1
ve1 vet13 adm2 xyz
ve2 vy1
vx kit1
但是,我的测试查询仍然不起作用
我的测试:
SELECT
L1.child as ID
L1.parent as Level1
L2.parent as Level2
L3.parent as Level3
L4.parent as Level4
FROM
Hierarchy as L1
INNER JOIN
Hierarchy as L2
ON L1.child = L2.parent
INNER JOIN
Hierarchy as L3
ON L2.child = L3.parent
INNER JOIN
Hierarchy as L4
ON L3.child = L4.parent
我只测试了4个级别,但在实际数据库中,级别的数量可能会发生变化
测试表:
CREATE TABLE Hierarchy(
parent VARCHAR(20),
child VARCHAR(20))
INSERT INTO Hierarchy VALUES ('ve1','vet12'),
('ve1' ,'vet13'),
('vet12','adm1'),
('vet13','adm2'),
('adm2','xyz'),
('ve2','vy1'),
('vx','kit1')
列的数量不应更改,因此需要指定列的最终数量。您需要将联接更改为外部联接,以允许层次结构的级别低于最大级别
SELECT
L1.parent AS Level1,
L1.child AS Level2,
L2.child AS Level3,
L3.child AS Level4,
L4.child AS Level5
FROM Hierarchy as L1
LEFT JOIN Hierarchy as L2 ON L1.child = L2.parent
LEFT JOIN Hierarchy as L3 ON L2.child = L3.parent
LEFT JOIN Hierarchy as L4 ON L3.child = L4.parent
WHERE NOT EXISTS( SELECT Child FROM Hierarchy h WHERE h.child = L1.Parent);
如果您知道最多有四个级别,您可以使用
join
s。谢谢您,路易斯,您的查询看起来不错。但实际上级别的数量可能会有所不同,所以我不能用5个级别来修复它。我需要一个动态递归查询,这将是一个很大的开销。您可能希望计划在显示层上完成此操作。