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

我有一个语句'完成种数'=COUNT(CASEWHENA.CLOSE_ID='T'THENA.MO_NOELSE0END),这样运行后,COUNT的结果是全部的A.MO_... 我有一个语句
'完成种数'=COUNT(CASE WHEN A.CLOSE_ID='T' THEN A.MO_NO ELSE 0 END),
这样运行后,COUNT的结果是全部的A.MO_NO的个数,但是A.MO_NO里面有重复的,我想排除掉重复的,该怎么做?如果变成
'完成种数'=COUNT(DISTINCT(CASE WHEN A.CLOSE_ID='T' THEN A.MO_NO ELSE 0 END)),分析器就提示【将 varchar 值 'MO06190004' 转换为数据类型为 int 的列时发生语法错误。】要怎么搞哦?如果调换成CASE WHEN *** THEN COUNT***的形式,又非要让我加上GROUP BY,但是加上后汇总表就乱了,所以不行。求高人指教一下。
这个语句是加在C#中BUTTON控件下的,所以只能用语句吧
展开
 我来答
ann7788
推荐于2017-05-21 · TA获得超过499个赞
知道小有建树答主
回答量:359
采纳率:0%
帮助的人:311万
展开全部
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才是不会起做用的数。
常乐常知足
2017-06-30 · TA获得超过1152个赞
知道小有建树答主
回答量:702
采纳率:66%
帮助的人:191万
展开全部
可以用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)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
你我皆凡人0V
2010-12-29 · TA获得超过392个赞
知道小有建树答主
回答量:806
采纳率:0%
帮助的人:649万
展开全部
select count(*) from (select distinct * from tableName) as a
你参考这种方式试一下
如果实在不行,就用视图吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lijibao007
2010-12-29
知道答主
回答量:29
采纳率:0%
帮助的人:0
展开全部
select COUNT(CASE WHEN A.CLOSE_ID='T' THEN A.MO_NO ELSE 0 END) from (select distinct * from XXX)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式