case count(distinct是什么意思

lilinew 2010-10-22 06:46:01
select
User.ID as UserID,
case count(distinct
case
when Amount>0 or Fee>0 then userid
else null
end
)
when 0 then 0
else 1
end ,
case count( distinct
case IsEnabled
when 1 then userid
else null
end)
when 0 then 0
else 1
end ,
accontID from a.......

这里
case count(distinct
case
when Amount>0 or Fee>0 then userid
else null
end
)
when 0 then 0
else 1
end ,
case count( distinct
case IsEnabled
when 1 then userid
else null
end)
when 0 then 0
else 1
end 是什么意思 ??
...全文
370 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lilinew 2010-10-24
select count(distinct null)
;
+----------------------+
| count(distinct null) |
+----------------------+
| 0 |
+----------------------+
1 row in set

-------------可行的
回复
abuying 2010-10-22
1:统计满足Amount>0 or Fee>0 条件不重复userid的个数,
如果为0,没有此条件userid,则为0,如果有,则为1

2,采用case嵌套
统计满足IsEnabled=1条件不重复userid的个数
如果为0,没有此条件userid,则为0,如果有,则为1
回复
aisail 2010-10-22
去除重复值,重复值只计算一次
回复
lilinew 2010-10-22
选择一个
case count(distinct case when Amount>0 or Fee>0 then userid else null end )
when 0 then 0
else 1
end ,

这样明白了点

应该是这个意思

case when Amount>0 or Fee>0 那个count(distinct userId)的数据 ,否则 count(distinct null)
如果count(distinct结果为0--》 0
count(distinct结果不为0 ---》 1
回复
SQLCenter 2010-10-22
简化

sign(count(case when Amount>0 or Fee>0 then userid end)),
sign(count(case IsEnabled when 1 then userid end))
回复
SQLCenter 2010-10-22
这个逻辑又为何要distinct呢?
回复
SQLCenter 2010-10-22
V1:Amount>0 or Fee>0 的不重复 userid 数
V1=0 ? 0 : 1

V2: IsEnabled=1 的不重复 userid 数
V2=0 ? 0 : 1
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-22 06:46
社区公告
暂无公告