sql - 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
案例声明将包括所有成员资格和服务类型,但我认为这对于我的示例来说已经足够了。任何帮助将不胜感激!这几天我一直在做这件事。
解决方案
使用总和
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)