Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何透视此父子表?_Sql_Sql Server_Hierarchy - Fatal编程技术网

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个级别来修复它。我需要一个动态递归查询,这将是一个很大的开销。您可能希望计划在显示层上完成此操作。