2012-08-09 83 views
0

我期待使用pivot函數將列的行值轉換爲單獨的列。該列中有100多個不同的值,並且對透視函數的'for'子句中的每個單獨的值進行硬編碼將非常耗時並且從可維護性的角度來看並不好。我想知道是否有更簡單的方法來解決這個問題?TSQL數據透視長列表

感謝

+0

可能重複的[SQL Server動態PIVOT查詢?](http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query) – RichardTheKiwi 2013-05-03 09:44:09

回答

3

您可以使用動態SQL的PIVOT對於這種類型的查詢。動態SQL將獲得這使您無需硬編碼的每個項目要在執行改造項目列表:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.condition_id) 
      FROM t c 
      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) 

SQL Fiddle with Demo

如果您發佈數據的樣本,你需要進行轉換,然後我可以調整我的查詢來演示。