2016-03-01 46 views
-3

我有一個表在MySQL中使用這些數據初級講座:如何寫這個查詢的SQL與類別,日期和

DATE  Category AMOUNT 
2016-1-1  A   12 
2016-1-1  B   10 
2016-1-2  A   5 
2016-1-3  C   1 
2016-2-1  A   5 
2016-2-1  B   6 
2016-2-2  A   7 
2016-2-3  C   3 

我怎樣才能得到如下結果:

MONTH  TOTAL Category-A Category-B Category-C 

2016 Jan 28  17   10   1  

2016 Feb 21  12   6   3  
+0

您的數據與期望之間的關係是什麼? –

+0

我認爲你加入了另一個表格,以期望的結果爲Category字段作爲主鍵。請及時發佈要求。 – Chendur

+4

你還使用了哪些數據庫軟件? MySQL,Oracle,MS SQL Server等 – shamsup

回答

0

如果你使用MySQL這將工作:

SELECT 
    DATE_FORMAT(DATE, '%Y %b') AS MONTH, 
    SUM(AMOUNT) AS TOTAL, 
    SUM(IF(CATEGORY='A', AMOUNT, 0)) AS `Category-A`, 
    SUM(IF(CATEGORY='B', AMOUNT, 0)) AS `Category-B`, 
    SUM(IF(CATEGORY='C', AMOUNT, 0)) AS `Category-C` 
FROM your_table 
GROUP BY MONTH; 

對於其他數據庫引擎,你可能需要改變一點。

+0

我認爲你可以嘗試使用pivot。 – Chuck

+0

您可以使用'EXTRACT(YEAR_MONTH FROM date)'而不是'DATE_FORMAT(date,'%Y%b')' – Trix

+0

謝謝您的回答。這個對我有用。 – raulliu07

0
DECLARE @Table1 TABLE 
    (DATE varchar(8), CAT varchar(1), AMOUNT int) 
; 

INSERT INTO @Table1 
    (DATE, CAT, AMOUNT) 
VALUES 
    ('2016-1-1', 'A', 12), 
    ('2016-1-1', 'B', 10), 
    ('2016-1-2', 'A', 5), 
    ('2016-1-3', 'C', 1), 
    ('2016-2-1', 'A', 5), 
    ('2016-2-1', 'B', 6), 
    ('2016-2-2', 'A', 7), 
    ('2016-2-3', 'C', 3) 
; 


Select Months, 
[A][Category-A], 
[B][Category-B], 
[C][Category-C], 
SUM([A]+[B]+[C])TOTAL 
from (
select CAST(year(DATE) AS VARCHAR)+' '+CONVERT(CHAR(3), DATENAME(MONTH, date))Months, 
CAT, 
AMOUNT 
from @Table1)T 
PIVOT (SUM(AMOUNT) FOR cat IN ([A],[B],[C]))P 
GROUP BY Months,[A],[B],[C] 
ORDER BY CONVERT(CHAR(3), DATENAME(MONTH, Months)) desc