在声明的情况下需要不同的计数

时间:2016-02-25 09:12:03

标签: sql-server

我正在创建一个查询所有筛选出吸烟状况并需要一组独特患者的人。我从遇到的桌子上拉,所以病人可能会被多次询问。在我的情况下,当我声明我想限制"那么......"导致类似于"然后计算不同的患者"但它给了我一个关于聚合不允许聚合的错误。如果我删除它,它将不会产生我想要的总数,它告诉我我需要在group by子句中,我不想要它。据我所知,限制不是sql-server中的一个选项

,count(case when soc.tobacco_user_c in (1, 2, 4, 5) and dmw.SMOKING_CESS_CNSL_YN ='y' then enc.PAT_ID **Here is where I want a unique count of patients** end) Compliant

3 个答案:

答案 0 :(得分:0)

您可以将DISTINCTCASE表达式合并。

示例

SELECT
    COUNT(DISTINCT CASE WHEN tobacco = 1 THEN PAT_ID ELSE NULL END)
...
;

我缩写了您的示例,以便于阅读。 NULL不会包含在最终计数中,因此无需担心off by one错误。

答案 1 :(得分:0)

case when soc.tobacco_user_c in (1, 2, 4, 5) and dmw.SMOKING_CESS_CNSL_YN ='y' then COUNT(DISTINCT enc.PAT_ID) ELSE 0 end Compliant

答案 2 :(得分:0)

我最终创建了两个子查询,然后在这些查询的每个最大列上执行不同的选择计数,以将结果限制为一个