具有 Distinct 的 SUM 大小写逻辑

iMa*_*Guy 3 sql-server t-sql

这是我的第一篇文章,所以请温柔:)

我有几个疑问:

SELECT COUNT(DISTINCT(h.USERID))
FROM MHGROUP.USERHISTORY h with (NOLOCK) 
JOIN MHGROUP.DOCUSERS u with (NOLOCK) on h.USERID = u.USERID
where h.CUSTOM2 = 'Work Web'
and h.ACTIONDATETIME >= GETUTCDATE()-30 
and u.LOGIN = 'y'
Run Code Online (Sandbox Code Playgroud)
SELECT COUNT(DISTINCT(h.USERID))
FROM MHGROUP.USERHISTORY h with (NOLOCK) 
JOIN MHGROUP.DOCUSERS u with (NOLOCK) on h.USERID = u.USERID
where h.CUSTOM2 = 'Work Web'
and h.ACTIONDATETIME >= GETUTCDATE()-30 
and u.LOGIN = 'y'
Run Code Online (Sandbox Code Playgroud)

现在我被要求提取去年的数据,所以我想我会使用 case 语句,但无法弄清楚如何将不同的用户部分合并到 sum case 语句中......所以我得到了巨大的数字, 明显地

SELECT COUNT(DISTINCT(h.USERID))
FROM MHGROUP.USERHISTORY h with (NOLOCK) 
JOIN MHGROUP.DOCUSERS u with (NOLOCK) on h.USERID = u.USERID
where h.CUSTOM2 = 'OUTLOOK'
and h.ACTIONDATETIME >= GETUTCDATE()-30 
and u.LOGIN = 'y'
Run Code Online (Sandbox Code Playgroud)

返回的是以下内容,这是一个总和。我正在寻找每种方式的不同计数。

用户太多

感谢您的帮助

Mik*_*son 6

count(column)不计算null值,因此您可以count()与返回h.USERIDor的 case 语句一起使用null

, COUNT(DISTINCT CASE WHEN h.CUSTOM2 = 'Work Web' THEN h.USERID ELSE NULL END) UserCountWorkWeb
, COUNT(DISTINCT CASE WHEN h.CUSTOM2 = 'OUTLOOK' THEN h.USERID ELSE NULL END) UserCountOutlook
Run Code Online (Sandbox Code Playgroud)