SQL时如何使用案例?

时间:2016-06-30 07:07:07

标签: mysql sql count case

我试图从表中计算每月每天的交易次数。我有这样的查询:

SELECT namarss,
case(tanggal_daftar) when '2016-06-01' then count(namarss) else '' end as "01",
case(tanggal_daftar) when '2016-06-02' then count(namarss) else '' end as "02",
case(tanggal_daftar) when '2016-06-03' then count(namarss) else '' end as "03",
case(tanggal_daftar) when '2016-06-04' then count(namarss) else '' end as "04",
case(tanggal_daftar) when '2016-06-05' then count(namarss) else '' end as "05",
case(tanggal_daftar) when '2016-06-06' then count(namarss) else '' end as "06",
case(tanggal_daftar) when '2016-06-07' then count(namarss) else '' end as "07",
case(tanggal_daftar) when '2016-06-08' then count(namarss) else '' end as "08",
case(tanggal_daftar) when '2016-06-09' then count(namarss) else '' end as "09",
case(tanggal_daftar) when '2016-06-10' then count(namarss) else '' end as "10",
case(tanggal_daftar) when '2016-06-11' then count(namarss) else '' end as "11",
case(tanggal_daftar) when '2016-06-12' then count(namarss) else '' end as "12",
case(tanggal_daftar) when '2016-06-13' then count(namarss) else '' end as "13",
case(tanggal_daftar) when '2016-06-14' then count(namarss) else '' end as "14",
case(tanggal_daftar) when '2016-06-15' then count(namarss) else '' end as "15",
case(tanggal_daftar) when '2016-06-16' then count(namarss) else '' end as "16",
case(tanggal_daftar) when '2016-06-17' then count(namarss) else '' end as "17",
case(tanggal_daftar) when '2016-06-18' then count(namarss) else '' end as "18",
case(tanggal_daftar) when '2016-06-19' then count(namarss) else '' end as "19",
case(tanggal_daftar) when '2016-06-20' then count(namarss) else '' end as "20",
case(tanggal_daftar) when '2016-06-21' then count(namarss) else '' end as "21",
case(tanggal_daftar) when '2016-06-22' then count(namarss) else '' end as "22",
case(tanggal_daftar) when '2016-06-23' then count(namarss) else '' end as "23",
case(tanggal_daftar) when '2016-06-24' then count(namarss) else '' end as "24",
case(tanggal_daftar) when '2016-06-25' then count(namarss) else '' end as "25",
case(tanggal_daftar) when '2016-06-26' then count(namarss) else '' end as "26",
case(tanggal_daftar) when '2016-06-27' then count(namarss) else '' end as "27",
case(tanggal_daftar) when '2016-06-28' then count(namarss) else '' end as "28",
case(tanggal_daftar) when '2016-06-29' then count(namarss) else '' end as "29",
case(tanggal_daftar) when '2016-06-30' then count(namarss) else '' end as "30",
case(tanggal_daftar) when '2016-06-31' then count(namarss) else '' end as "31"
FROM mcutrpendaftaran
group by namarss, tanggal_daftar

结果是这样的:

enter image description here

但我希望结果显示如下:

enter image description here

我应该怎么做才能修复它?谢谢:))

2 个答案:

答案 0 :(得分:0)

只需从tanggal_daftar子句中删除字段GROUP BY

SELECT namarss,
       case when tanggal_daftar = '2016-06-01' then 1 end as "01",
       case when tanggal_daftar = '2016-06-02' then 1 end as "02",
       case when tanggal_daftar = '2016-06-03' then 1 end as "03",
       case when tanggal_daftar = '2016-06-04' then 1 end as "04",
       case when tanggal_daftar = '2016-06-05' then 1 end as "05",
       ...

FROM mcutrpendaftaran
group by namarss

上述查询应该为每namarss个值提供一条记录。

答案 1 :(得分:0)

更改

group by namarss, tanggal_daftar

 group by namarss

并更改

count(namarss) to count(tanggal_daftar) everywhere

编辑:

这很有效,但很难看:

    select namarss, sum([01]) [01], sum([02]) [02], sum([03]) [03], sum([04]) [04]
from (
SELECT namarss,
case(tanggal_daftar) when '2016-06-01' then count(tanggal_daftar) else '' end as "01",
case(tanggal_daftar) when '2016-06-02' then count(tanggal_daftar) else '' end as "02",
case(tanggal_daftar) when '2016-06-03' then count(tanggal_daftar) else '' end as "03",
case(tanggal_daftar) when '2016-06-04' then count(tanggal_daftar) else '' end as "04"
FROM mcutrpendaftaran
group by namarss, tanggal_daftar) A group by namarss

我没有对此进行过测试,但即使此查询有效,也远未进行优化。从mcutrpendaftaran表中提供一些样本数据确实会有所帮助。