如何在Transact / SQL中创build数据透视表?
我的源数据表是
MemID Condition_ID Condtion_Result ---------------------------------- 1 C1 0 1 C2 0 1 C3 0 1 C4 1 2 C1 0 2 C2 0 2 C3 0 2 C4 0
我想创build的预期观点是…
MemID C1 C2 C3 C4 ------------------ 1 1 0 0 1 2 0 0 0 1
这是另一个条件。 在上面的源表中,给定的MemID只有4行。 这个数字在实际情况中会有所不同。 我的数据透视表(或任何其他解决scheme)应该select任意数量的条件结果,并将其显示为列。 怎么做 ?
你需要使用一个PIVOT
。 您可以使用STATIC PIVOT(您知道要转换的列的值)或DYNAMIC PIVOT(其中的列未知)直到执行时间。
静态数据透视表 (请参阅SQL小提琴演示 ):
select * from ( select memid, Condition_id, Condition_Result from t ) x pivot ( sum(condition_result) for condition_id in ([C1], [C2], [C3], [C4]) ) p
dynamic数据透视表 (请参阅SQL小提琴演示 ):
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.condition_id) FROM tc FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT memid, ' + @cols + ' from ( select MemId, Condition_id, condition_result from t ) x pivot ( sum(condition_result) for condition_id in (' + @cols + ') ) p ' execute(@query)
两者都会产生相同的结果。