2013-07-11 38 views
0

我有一個表,#T與16行: ID INT 描述VARCHAR(60) 平衡十進制(6,2)轉換垂直SQL結果到水平輸出

我需要說明&餘額數據,和「選擇描述,從#t按ID排序」將完成這項工作。但理想情況下,我可以做橫向而不是垂直顯示結果。

現在我知道我可以用16列構建一個新表,並且使用很多動態sql爲每個這樣的列填充平衡,但是,我也確定使用pivot或其他方法可以更輕鬆地完成此操作像那樣 - 儘管我真的不明白如何。

有人能請我照看嗎?

感謝 約翰

+1

親愛的約翰:請告訴,這RDBMS是你使用?每個供應商都傾向於將他們的實施方案應用到您的方案中。 – Ryan

+1

請通過添加適當的標籤(Oracle,SQL Server,MySQL等)來指定您要定位的RDBMS。可能會有利用不被普遍支持的語言或產品功能的答案。此外,通過爲特定的RDBMS添加標籤,您的問題可能會得到更適合回答的人的關注。 – Taryn

回答

4

假設你正在使用SQL Server,你可以實現PIVOT功能的數據行轉換成列。基本語法爲:

select * 
from 
(
    select description, balance 
    from yourtable 
) d 
pivot 
(
    sum(balance) 
    for description in ([desc1], desc2]) -- replace this with the names of your descriptions 
) piv; 

當然,如果你有數目不詳的描述值,那麼你就需要使用動態SQL:

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(description) 
        from yourtable 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT ' + @cols + ' 
      from 
      (
       select description, balance 
       from yourtable 
      ) x 
      pivot 
      (
       sum(balance) 
       for description in (' + @cols + ') 
      ) p ' 

execute sp_executesql @query