如何将以下平面记录转换为SQL Server中的层次结构?

时间:2013-06-02 03:44:30

标签: sql-server tsql sql-server-2012 hierarchical-data

我在表1中有以下记录:

L1   L1DESC  L2   L2DESC  L3    L3DESC  L4     L4DESC  L5      L5DESC  L6         L6DESC
10   L1      101  L2      101A  L3      101A27 L4      101A27B L5      101A27B5   L6

有六级层次结构,在这种情况下,L1是根,L2是L1的子节点,L3是L2的子节点,依此类推。

表2是一个简单的分层架构

级别 - 描述 - 父级

这意味着我想将该单个记录转换为以下分层记录:

LEVEL         DESCRIPTION    PARENT
10            L1             NULL
101           L2             L1
101A          L3             L2
101A27        L4             L3
101A27B       L5             L4
101A27B5      L6             L5

在SQL中执行此操作的最快/最优雅的方法是什么?

由于

1 个答案:

答案 0 :(得分:2)

由于这是一个固定的层次结构,只需将结果联合起来。

SELECT  L1
       ,L1DESC
       ,CAST(NULL AS VARCHAR(50)) AS Parent
FROM    T1
UNION ALL
SELECT  L2
       ,L2DESC
       ,L1Desc
FROM    T1
UNION ALL
SELECT  L3
       ,L3DESC
       ,L2Desc
FROM    T1
UNION ALL
SELECT  L4
       ,L4DESC
       ,L3Desc
FROM    T1
UNION ALL
SELECT  L5
       ,L5DESC
       ,L4Desc
FROM    T1
UNION ALL
SELECT  L6
       ,L6DESC
       ,L5Desc
FROM    T1

看到这个小提琴:http://sqlfiddle.com/#!3/32e33/2