我正在寻找一种巧妙的方法来根据以下数据构建分层订单行:
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
我正在寻找的结果是这样的:
我知道源数据和结果可能看起来很奇怪,但我是如何获取它们的。 在我的实际情况中,我可能会得到多个专栏,但每个建议或想法都会受到赞赏。
注意:[级别]顺序需要与我提供的屏幕截图中的相同。这才是真正的困难。
这个想法是保留连接:
最佳答案
如果顺序很重要,请尝试以下操作:
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/