从分层表结构构建分层订单行

时间:2013-10-30 10:08:05

标签: sql tsql hierarchical-data

我正在寻找一种从以下数据构建分层订单行的棘手方法:

enter image description here

SET NOCOUNT ON
GO

    DECLARE @DataSource TABLE
    ( 
        [Col001] CHAR(2)
       ,[Col002] CHAR(2)
       ,[Col003] CHAR(2)
       ,[Col004] CHAR(2)
    )

    INSERT INTO @DataSource ([Col001], [Col002], [Col003], [Col004])
    VALUES ('A1','B1','C1','D1')
          ,('A1','B1','C1','D2')
          ,('A1','B1','C2','D3')
          ,('A1','B1','C2','D4')
          ,('A1','B2','C1','D5')
          ,('A1','B2','C1','D6')
          ,('A1','B2','C1','D7')

    SELECT [Col001]
          ,[Col002]
          ,[Col003]
          ,[Col004]
    FROM @DataSource

SET NOCOUNT OFF
GO

我看到的结果是这样的:

enter image description here

我知道源数据,结果可能看起来很奇怪,但我是如何得到它们的。 在我的实际情况中,我可能会得到多个专栏,但每个建议或想法都将受到赞赏。

注意:[Level]顺序在我提供的屏幕截图中需要相同。这才是真正的困难。

我们的想法是保持联系:

enter image description here

2 个答案:

答案 0 :(得分:2)

如果订单很重要,那么试试这个:

select [Level],Val from
(
SELECT '0' as [Level], [Col001] as Ord, [Col001] as Val  FROM @DataSource
union 
SELECT '1' as [Level], [Col001]+[Col002] as Ord, [Col002] as Val  FROM @DataSource
union 
SELECT '2' as [Level], [Col001]+[Col002]+[Col003] as Ord, [Col003] as Val  FROM @DataSource
union 
SELECT '3' as [Level], [Col001]+[Col002]+[Col003]+[Col004] as Ord, [Col004] as Val  FROM @DataSource
) as T1
ORDER BY Ord,[Level]

答案 1 :(得分:0)

我不确定您希望如何确定等级 也许是这样的

    /*Union a select for each column and select distinct.
    I am assuming that column number - 1 is the level*/
    SELECT DISTINCT T1.Level,T1.Data
    FROM (
    SELECT 0 [Level],[Col001] [Data] FROM @DataSource
    UNION ALL SELECT 1, [Col002] FROM @DataSource
    UNION ALL SELECT 2, [Col003] FROM @DataSource
    UNION ALL SELECT 3, [Col004] FROM @DataSource
    ) T1