【问题标题】:How to use case when then SQL?那么SQL怎么用case呢?
【发布时间】:2016-06-30 07:07:07
【问题描述】:

我正在尝试从表中计算每月每天有多少笔交易。我有这样的查询:

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

结果是这样的:

但我想要这样的结果显示:

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

【问题讨论】:

  • 请更新您的表定义
  • 我猜您的要求是获取每天每个 namarss 的计数。最好采用更简单的查询(group by namarass , day and get the count thereby)。稍后在您的应用程序级别进行旋转。

标签: mysql sql count case


【解决方案1】:

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

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 值提供一条记录。

【讨论】:

  • 如果我删除 tanggal_daftar,结果将在日期 2 中显示 '6' @GiorgosBetsos
【解决方案2】:

改变

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 表中提供一些样本数据会很有帮助。

【讨论】:

  • 结果是一样的,没有区别@AshwinNair
猜你喜欢
  • 2021-08-17
  • 1970-01-01
  • 2014-02-03
  • 2015-04-07
  • 2012-02-01
  • 1970-01-01
  • 2016-01-21
  • 2013-11-17
  • 1970-01-01
相关资源
最近更新 更多