2017-02-16 51 views
1

我需要從存儲過程輸出數據作爲結果集,其中源數據的列在輸出中表示爲行。我應該在輸出中的每個列中看到一行記錄,這些記錄位於我的源數據中,並且我的輸出中的每一行都會在我的源數據中看到一列。我只是沒有看到我可以如何使用Pivot或其他我看過的方法來做到這一點。SQL將列移動到行

一旦我的數據面向我喜歡的方式,我想我會查詢sys.columns注入源數據列名作爲我的輸出的第一列。我還可能需要事先查詢將用作輸出列名稱的源數據值。我想象未來我會有一些宏偉的動態SQL,但如果需要,我可以自己分類。我主要關心如何將列轉換爲行。見下:

SELECT 
    ID 
    ,XID 
    ,Amount 
FROM (
     SELECT 11 as ID, 301 as XID, 50001 as Amount UNION ALL 
     SELECT 12 as ID, 302 as XID, 50002 as Amount UNION ALL 
     SELECT 13 as ID, 303 as XID, 50003 as Amount UNION ALL 
     SELECT 14 as ID, 304 as XID, 50004 as Amount 
    ) T1 
/* 
The above query returns this: 

ID XID Amount 
---------------- 
11 301 50001 
12 302 50002 
13 303 50003 
14 304 50004 


Instead I would like to see this: 

Column 11  12  13  14 
----------------------------------- 
ID  11  12  13  14 
XID  301 302 303 304 
Amount 50001 50002 50003 50004 

*/ 
+3

退房PIVOT:https://technet.microsoft.com/en- us/library/ms177410(v = sql.105).aspx – Leonidas199x

+0

這與你想要的相反,但它守ld引導你在正確的方向http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server –

+0

使用PIVOT你可以導致ID列的源值表示輸出中每個ID的列,但不能導致其餘源列被表示爲行。我看不到如何用PIVOT做我想要的。 – RedRocketFire

回答

1

假設你需要動態。

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(ID) From Yourtable Order by 1 For XML Path('')),1,1,'') 
Select @SQL = ' 
Select [Column],' + @SQL + ' 
From (
     Select B.* 
     From YourTable A 
     Cross Apply (
         Values (1,''ID'' ,ID,ID) 
          ,(2,''XID'' ,ID,XID) 
          ,(3,''Amount'',ID,Amount) 
        ) B ([Seq],[Column],[Item],[Value]) 
    ) A 
Pivot (sum(Value) For [Item] in (' + @SQL + ')) p 
Order By [Seq] 
' 
Exec(@SQL); 

返回

enter image description here

如果你不需要動態

Select [Column],[11],[12],[13],[14] 
From (
     Select B.* 
     From YourTable A 
     Cross Apply (
         Values (1,'ID' ,ID,ID) 
          ,(2,'XID' ,ID,XID) 
          ,(3,'Amount',ID,Amount) 
        ) B ([Seq],[Column],[Item],[Value]) 
    ) A 
Pivot (sum(Value) For [Item] in ([11],[12],[13],[14])) p 
Order By [Seq] 
+0

這是一個神話般的解決方案。謝謝!!! – RedRocketFire

+0

@RedRocketFire對它有幫助。更多的轉置比樞軸:) –