如何在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) 

两者都会产生相同的结果。