我有一张类似下面的表格
| DATE | FULL/PART | AMMOUNT | CODETYPE |
|2014-01-02| PART | 3.00 | 02 |
|2014-01-02| PART | 10.00 | 02 |
|2014-01-03| PART | 5.00 | 01 |
|2014-01-03| FULL | 10.00 | 03 |
|2014-01-01| FULL | 10.00 | 01 |
|2014-01-01| FULL | 10.00 | 01 |
我想生成一个统计输出,如下所示
| DATE | CODETYPE | SUM(AMMOUNT)FULL | COUNT(AMMOUNT)FULL | SUM(AMMOUNT)PART | COUNT(AMMOUNT)PART|
|2014-01-01| 01 | 20.00 | 2 | 0.00 | 0 |
|2014-01-03| 03 | 10.00 | 1 | 0.00 | 0 |
|2014-01-03| 01 | 0.00 | 0 | 5.00 | 1 |
|2014-01-02| 02 | 0.00 | 0 | 13.00 | 2 |
我到目前为止的查询: -
SELECT DATE,CODETYPE,sum(AMMOUNT),count(AMMOUNT)
FROM myTABLE
WHERE CODETYPE='01' && FULL/PART='FULL' && DATE BETWEEN '2014-01-01' AND '2014-01-31'
SELECT DATE,CODETYPE,sum(AMMOUNT),count(AMMOUNT)
FROM myTABLE
WHERE CODETYPE='02' && FULL/PART='PART' && DATE BETWEEN '2014-01-01' AND '2014-01-31'
SELECT DATE,CODETYPE,sum(AMMOUNT),count(AMMOUNT)
FROM myTABLE
WHERE CODETYPE='03' && FULL/PART='PART' && DATE BETWEEN '2014-01-01' AND '2014-01-31'
最后GROUP BY DATE,CODETYPE
每个日期都有完整或部分,不同的CODETYPE(01,02,03,...),我必须将数据汇总到上面的输出中,
DATE 2014-01-01,sum()和count()AMDOUNT,其中CODETYPE ='01'且按日期分组
我应该如何实现它?或者是否有任何查询功能可以解决我不知道的这个问题(我是新来的SQL)?
修改: 日期范围和CODETYPE基于用户需求。
答案 0 :(得分:3)
您想要条件聚合:
SELECT DATE, CODETYPE,
SUM(CASE WHEN `FULL/PART` = 'FULL' THEN AMOUNT END) as AMOUNT_FULL,
SUM(`FULL/PART` = 'FULL') as CNT_FULL,
SUM(CASE WHEN `FULL/PART` = 'PART' THEN AMOUNT END) as AMOUNT_PART,
SUM(`FULL/PART` = 'PART') as CNT_PART
FROM myTABLE
WHERE FDATE BETWEEN '2014-01-01' AND '2014-01-31'
GROUP BY DATE, CODETYPE