2014-11-01 72 views
2

請考慮下表(表名:售)垂直和水平組在SQL

ID  Customer  Year  Amount 
1   A   2012  1000 
2   B   2012  2000 
3   A   2012  1500 
4   C   2013  1000 
5   B   2013  2000 

我在找查詢其返回結果如下:

Customer  Year2012  Year2013 
A    2500   0 
B    2000   2000 
C    0   1000 
+1

你剛纔2012年和2013? – sqluser 2014-11-01 05:10:31

+1

如果查詢可以支持更多的年份要好得多。但只能支持兩年的怪物也是可愛的。 – Behnam 2014-11-01 05:14:08

回答

1

試試這個:

SELECT Customer,ISNULL([2012],0)as [2012],ISNULL([2013],0)as [2013] 
FROM (
    SELECT 
     Customer,[Year] as [year], Amount 
    FROM Mytest 
) as s 
PIVOT(SUM(AMOUNT) 
     FOR Year IN ([2012], [2013])) AS PVTTable 

OUTPUT:

Customer 2012 2013 
A   2500  0 
B   2000  2000 
C   0  1000 
0
select Customer, 
    SUM(case when Year = '2012' then Amount else 0 end) as 'Year2012', 
    SUM(case when Year = '2013' then Amount else 0 end) as 'Year2013' 
from Sale 
group by Customer; 

SQL小提琴 - http://sqlfiddle.com/#!2/f560b/4

-1

執行下面的代碼:

SELECT * FROM customer 
PIVOT(SUM(Amount) FOR Year IN ([2012],[2013])) 
AS PVTTable 
+0

小心解釋爲什麼OP應該放棄其主鍵列? – DeanOC 2014-11-01 06:09:30