2013-02-16 40 views
0

我有一個3列的表,如下所示。我想總結每個TYPE的成本(只有0/1/2),然後按月份和年份(DATE字段)對它們進行分組,所有這些都使用select語句。根據日期和其他字段求和並組合多個字段

+------------+------+-------+ 
| DATE  | TYPE | COST | 
+------------+------+-------+ 
| Feb-1-2003 | 0 | 19.40 | 
| Feb-5-2010 | 1 | 28.10 | 
| Mar-3-2011 | 2 | 64.20 | 
| Sep-8-2012 | 0 | 22.60 | 
| Dec-6-2013 | 1 | 13.50 | 
+------------+------+-------+ 

輸出將如下所示:

+----------+------------+------------+------------+ 
| PERIOD | TYPE0  | TYPE1  | TYPE2  | 
+----------+------------+------------+------------+ 
| Jan 2003 | 123123.12 | 23432.12 | 9873245.12 | 
| Feb 2003 | 123123.12 | 23432.12 | 9873245.12 | 
| Mar 2003 | 123123.12 | 23432.12 | 9873245.12 | 
etc... 
+----------+------------+------------+------------+ 

有人可以用這個select語句幫助嗎?

+0

從未礦場,答案已經發布,它的一個偉大的答案 – am05mhz 2013-02-16 04:08:46

回答

3

Mysql不是爲透視查詢而設計的。這是更好一些其他語言聚集..這並不是說這是不可能的,但:

SELECT 
    CONCAT(MONTH(DATE), ' ', YEAR(DATE)) AS PERIOD, 
    SUM(IF(TYPE = 0, COST, 0)) AS TYPE0, 
    SUM(IF(TYPE = 1, COST, 0)) AS TYPE1, 
    SUM(IF(TYPE = 2, COST, 0)) AS TYPE2 
FROM 
    t1 
GROUP BY 
    PERIOD 
+0

哇 - 非常好的和簡單!謝謝 – TSG 2013-02-16 04:17:16

+0

一個相關的問題,輸出按週期排序但是由於空間的原因,月份= 10,11,12,1,2,3等。有沒有辦法在PERIOD中將月份格式設置爲兩位數字(或修復排序)? – TSG 2013-02-16 04:26:17

+0

@Michelle你可以; 'WHERE'子句必須在'GROUP BY'之前,但在'FROM'之後 – 2013-02-16 04:29:41

相關問題