2013-02-16 37 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

相关问题