2016-12-09 48 views
-1

我有一個表中的列SQL組行至

ID | Customer | Type | Value | 
---+----------+---------+-------+ 
1 | John  | Income | 50 | 
2 | John  | Income | 20 | 
3 | Mike  | Outcome | 150 | 
4 | Robert | Income | 100 | 
5 | John  | Outcome | 300 | 

想要一個表像;

 | John | Mike | Robert | 
--------+------+------+--------+ 
Income | 70 | 0 | 100 | 
Outcome| 300 | 150 |  0 | 

什麼應該是SQL查詢?謝謝

問題是客戶和類型不是靜態的,他們是動態的。 我試過的東西:

SELECT 'TotalIncome' AS TotalSalaryByDept, 
    [John], [Mike] 
    FROM 
    (SELECT Customer, Income 
    FROM table001) AS a 
    PIVOT 
    (
    SUM(Income) 
    FOR ID IN ([John], [Mike]) 
    ) AS b; 
+2

看一看[PIVOT()](https://www.techonthenet.com/sql_server/pivot.php) – JohnHC

+0

告訴我們你的數據透視查詢,我們將指出如何讓它工作。你真的需要在你的問題中展示這些東西,從你以前的問題中快速瀏覽一下,你所付出的努力很小。我們不是免費的編碼服務,向我們展示您的嘗試,我們將提供幫助。 –

+0

顯示你嘗試過什麼。 – McNets

回答

4

這是一個快速動態的關鍵。我們使用CROSS APPLY來克服所需的措施。

Declare @SQL varchar(max) 
Select @SQL = Stuff((Select Distinct ',' + QuoteName(Customer) From YourTable Order by 1 For XML Path('')),1,1,'') 
Select @SQL = ' 
Select [Type],' + @SQL + ' 
    From (
     Select Item=A.Customer,B.* 
     From YourTable A 
     Cross Apply (
         Select Type=''Income'' ,Value=A.Income Union All 
         Select Type=''Outcome'',Value=A.Outcome 
        ) B 
     ) A 
Pivot (sum(value) For Item in (' + @SQL + ')) p' 
Exec(@SQL); 

返回

enter image description here

編輯 - 對於經修訂的課題

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(Customer) From YourTable Order by 1 For XML Path('')),1,1,'') 
Select @SQL = ' 
Select [Type],' + @SQL + ' 
    From (Select Customer,Type,Value from YourTable) A 
Pivot (Sum(Value) For [Customer] in (' + @SQL + ')) p' 
Exec(@SQL); 

返回

enter image description here

+0

@訪客我不明白你的評論。 –

+0

@訪客請參閱編輯/修訂部分 –

+0

謝謝你百萬次。 – Guest

-1

該表格就像它應該在SQL數據庫中一樣。列保留用於分類數據,行是您添加新實例的地方。

你需要做的是設置你的ASP,Excel數據透視表,或者你正在使用的display將數據格式化爲一個水平表格。我需要知道你用什麼來連接你的數據庫來給你一個例子。

+0

編輯我的問題 – Guest

+0

這個答案根本沒有意義。這個問題沒有涉及到「顯示」 – Hogan