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

标签 sql t-sql 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

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

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

这个想法是保留连接:

enter image description here

最佳答案

如果顺序很重要,请尝试以下操作:

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]

关于sql - 从分层表结构构建分层订单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19679302/

相关文章:

mysql - SQL:将日期 (26.11.17) 转换为时间戳 (1516184035)

sql-server - 从组中选择最低的 n 个值

sql - 如何验证 DateTime 是否包含 SQL Server 中的时间

javascript - 如何使用 laravel 制作分层表?

SQL在一个请求中计算购物车的价格

mysql - SQL排序通过维护变量顺序

sql - 从 Oracle 中的多个表中删除相同的列名

sql - 查询以获取给定时间范围内具有给定状态的项目的计数

c# - 返回分层 xml 的节点级别

mysql - 如何创建MySQL分层递归查询