2013-06-25 29 views
4

當我運行一個SQL查詢返回一列包含可變行數的行時,我想將每行轉換爲VALUE列(我不介意列標題/標題是什麼)。T-SQL:將可變行數轉換爲列

E.g.

Column1 
------- 
a 
b 
c 
d 
e 

我想一個腳本,將改造成以上的表像:

Col1 Col2 Col3 Col4 Col5 
------------------------ 
a b c d e 

(請注意,我不喜歡的列名)。

我知道我不能用戶PIVOT行號不固定(他們是基於SQL查詢)。

任何想法?

謝謝!

+1

可能重複的:http://stackoverflow.com/questions/13103114/tsql-select- values-from-rows-as-columns – JanR

回答

3

您試圖旋轉您的結果並在列名中包含計數器。由於我假定您不知道可能的列數,所以您需要使用動態SQL來完成此操作。

這應該是接近使用ROW_NUMBER拿到櫃檯:

declare @cols AS NVARCHAR(MAX), 
     @colswithalias AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

set @colswithalias = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
          + ' AS Col' 
          + CAST(ROW_NUMBER() OVER (ORDER BY col1) as varchar(10)) 
         FROM yourtable 
         FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
         FROM yourtable 
         FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 


set @query = 'SELECT ' + @colswithalias + ' 
      from 
      (
       select col1 rn, col1 
       from yourtable 
      ) x 
      pivot 
      (
       max(rn) 
       for col1 in (' + @cols + ') 
      ) p ' 

execute(@query) 
+0

謝謝你sdesdes :) –

+0

一個簡單的問題:你知道我可以如何將執行(@query)的輸出存儲到臨時表中嗎?嘗試了幾種方法,但沒有奏效! –

+0

希望這有助於 - http://sqlfiddle.com/#!3/789548/2 – sgeddes