首页 > 解决方案 > CASE 语句中的条件 COUNT

问题描述

表 1 是客户列表、他们拥有的会员资格、他们使用的服务以及使用服务的日期

表 2,只是按月份和会员类型分组的表 1,然后是服务会话数

我要做的是仅按特定服务类型计算会员会话。这是我到目前为止所拥有的,它返回一个错误,说“Service_Type”不在聚合函数或 group by 子句中,当我将“Service_Type”放在 group by 中时,查询没有错误,但 SESSIONS 列全部为 NULL .

SELECT 
  DATEFROMPARTS(YEAR(t1.Date),MONTH(t1.Date),1)AS 'Draft_Date', 
  Membership,
  CASE 
    WHEN Membership = 5 AND Service_Type = 'A' THEN COUNT(*)
    WHEN Membership = 2 AND Service_Type IN ('J','C')
  END AS'SESSIONS' 
FROM Table1 t1 
GROUP BY DATEFROMPARTS(YEAR(t1.Date),MONTH(t1.Date),1),Membership

案例声明将包括所有成员资格和服务类型,但我认为这对于我的示例来说已经足够了。任何帮助将不胜感激!这几天我一直在做这件事。

表格1
表格1

表 2
表 2

标签: sqltsql

解决方案


使用总和

SELECT DATEFROMPARTS(YEAR(t1.Date),MONTH(t1.Date),1) AS Draft_Date , Membership,
sum(CASE WHEN Membership = 5 AND Service_Type = 'A' THEN 1  else 0 end),
sum(case WHEN Membership = 2 AND Service_Type IN ('J','C') then 1 else 0 end)

FROM Table1 t1 group by DATEFROMPARTS(YEAR(t1.Date),MONTH(t1.Date),1)

推荐阅读