我知道有更好的方法来设计表格,但这只是我需要的一个例子
我似乎无法得到我正在寻找的结果
表格和数据:
查询:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(columnType)
FROM [Values]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT ' + @cols + ' FROM
(
SELECT value, columnType
FROM [Values]
) x
PIVOT
(
MAX(value)
FOR columnType IN (' + @cols + ')
) p '
EXECUTE(@query)
结果我得到:
我想要的结果
Product Item SubItem
A A A A A A
A A B A A B
B B A NULL
答案 0 :(得分:0)
您的查询可以使用join
s轻松解决,分为两个级别:
select v.value as Product, vi.value as Item, vsi.value as Subitem
from [Values] v left join
[Values] vi
on vi.column_type = 'Item' and vi.parent_id = v.id left join
[Values] vsi
on vsi.column_type = 'Sub Item' and vsi.parent_id = v.id
where v.column_type = 'Product';
如果您的级别数量未知,则可以使用动态SQL扩展此查询。