2013-02-06 23 views
1

的SQL服務器行數據改變重複列,這是我的表數據如何根據SQL

Companyname Qty Amount tax 
A    1  2  2 
A    2  4  2 
B    1  2  3 
C    1  2  2 
C    3  2  2 

這是我的除外輸出。

 A     B    C 
Qty Amount tax | Qty Amount tax | Qty Amount tax 
3  6  4  1  2  3  4  4  4 

公司可以增加

+0

全部在一行?每個公司不是一行? –

+0

從公司名稱中選擇公司名稱,總金額(數量)作爲數量,金額(金額)作爲金額,作爲稅表的總額(稅金),該查詢應該適用於您。 –

回答

0

如果你想每家公司一列,這是一個簡單的GROUP BY;

SELECT Companyname, SUM(Qty) Qty, SUM(Amount) Amount, SUM(tax) tax 
FROM myTable 
GROUP BY Companyname 

如果你真的希望這一切在一排作爲您預期的輸出似乎表明,它很可能會需要動態SQL,特別是如果你希望公司的名字是上述列名的線路。這會使您的查詢顯着更復雜。

2

爲此,您可以使用動態SQL:

DECLARE @Cols NVARCHAR(MAX) = STUFF((SELECT DISTINCT ',' + QUOTENAME(CompanyName + Col) 
            FROM T 
              CROSS JOIN 
              ( VALUES 
                ('_Qty'), 
                ('_Amount'), 
                ('_Tax') 
              ) c (col) 
            FOR XML PATH(''), TYPE 
            ).value('.', 'NVARCHAR(MAX)'), 1, 1, ''); 

DECLARE @SQL NVARCHAR(MAX) = 
    ' SELECT * 
     FROM ( SELECT [Col] = CompanyName + ''_'' + col, 
          Value 
        FROM T 
          UNPIVOT 
          ( Value 
           FOR Col IN ([Qty], [Amount], [Tax]) 
          ) Upvt 
       ) t 
       PIVOT 
       ( SUM(Value) 
        FOR [Col] IN (' + @cols + ') 
       ) pvt;' 

EXECUTE SP_EXECUTESQL @SQL; 

Example on SQL Fiddle

但是我的建議是不要用這個。在應用程序端處理像這樣的旋轉數據。