sql语句求解COUNT (CASE WHEN THEN***)排除重复项

2024-12-12 04:58:00
推荐回答(4个)
回答1:

select sum(case when A.CLOSE_ID='T' then 1 else 0 end)
from (select distinct A.CLOSE_ID,A.MO_NO from A) T

'完成种数'=COUNT(CASE WHEN A.CLOSE_ID='T' THEN A.MO_NO ELSE 0 END)这句的逻辑就有问题,你要求A.CLOSE_ID='T' 时, A.MO_NO 的个数吗?那样你直接写
select count(A.MO_NO) from A where A.CLOSE_ID='T' 就好了
就算你一定要用case when...then,你也要用sum而不是count,你用count是所以(CASE WHEN A.CLOSE_ID='T' THEN A.MO_NO ELSE 0 END)的个数,就算是0,它也是个值,仍然会被count进去啊,你只有sum时,0才是不会起做用的数。

回答2:

可以用count函数,但是else时用null值,不能用0,即:
COUNT(CASE WHEN A.CLOSE_ID='T' THEN A.MO_NO ELSE null END)
这个else还可以不写,因为默认情况下不写就是空值。即:
COUNT(CASE WHEN A.CLOSE_ID='T' THEN A.MO_NO END)

回答3:

select count(*) from (select distinct * from tableName) as a
你参考这种方式试一下
如果实在不行,就用视图吧

回答4:

select COUNT(CASE WHEN A.CLOSE_ID='T' THEN A.MO_NO ELSE 0 END) from (select distinct * from XXX)