【发布时间】:2014-03-20 01:43:00
【问题描述】:
我正在尝试使用 n 列构建一个集合,每一列代表层次结构的一部分,左侧是顶级父级,右侧是后代。在每列下应仅列出该列/层次结构的值。该图像显示了我到目前为止所拥有的,这是不正确的,因为 (1) NULLS 显示在间隙中,并且 (2) 我的“sometext”没有显示。
获得所需结果的正确方法是什么?
谢谢。
当前代码:
set nocount on
IF OBJECT_ID('tempdb..#tst') IS NOT NULL DROP TABLE #tst
create table #tst ( hiercode varchar(10) , sometext varchar(80) )
Insert into #tst
Select '/7/' , 'aaaa'
Union All
Select '/7/' , '1'
Union All
Select '/7/' , '2'
Union All
Select '/7/1/' , 'bbbb'
Union All
Select '/7/1/' , '3'
Union All
Select '/7/1/' , '4'
Union All
Select '/7/1/' , '5'
Union All
Select '/7/1/1/' , 'cccc'
Union All
Select '/7/1/1/' , '6'
Union All
Select '/7/1/1/' , '7'
Union All
Select '/7/1/1/' , '8'
Union All
Select '/7/1/2/' , 'dddd'
Union All
Select '/7/1/3/' , 'eeee'
Union All
Select '/7/2/' , 'ffff'
Union All
Select '/7/2/1/' , 'gggg'
Union All
Select '/7/2/1/' , '9'
Union All
Select '/7/2/1/' , '10'
Union All
Select '/7/2/1/' , '11'
Union All
Select '/7/2/2/' , 'hhhh'
Union All
Select '/7/2/3/' , 'iiii'
Union All
Select '/7/2/4/' , 'jjjj'
Union All
Select '/7/3/' , 'kkkk'
Union All
Select '/7/3/1/' , 'llll'
Union All
Select '/7/3/2/' , 'mmmm'
Union All
Select '/7/3/3/' , 'nnnn'
declare @cols as nvarchar(max) =
STUFF((SELECT distinct ',' + QUOTENAME(c.hiercode)
FROM #tst c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select @cols
declare @statemt as nvarchar(max) =
'SELECT ' + @cols + ' from
(
select hiercode
, sometext
from #tst
) x
pivot
(
max(hiercode)
for hiercode in (' + @cols + ')
) p '
select @statemt
execute(@statemt)
这是生成的集合。
这是我想要的集合(请原谅多余的引号)。
感谢所有想法。
谢谢。
【问题讨论】:
标签: sql-server dynamic pivot