我在案例声明中使用多个和时遇到问题。
我的数据库看起来像:
Enrollment Paperless Validated
0 1 0
1 0 1
0 1 0
1 1 1
0 0 0
0 1 0
0 0 0
0 1 0
1 1 1
0 1 0
所以我的查询如下:
Select
Count(case when [Enrollment] = 1 and [Paperless] = 1 and [Validated] = 1 then 1 else 0 end) as [Paperless]
,Count(case when [Enrollment] = 1 and [Paperless] = 1 and [Validated] = 1 then 1 else 0 end) as [Online_Only]
,Count(*) as "Total"
FROM [my_table]
Sql Fiddle:http://sqlfiddle.com/#!3/61202/5
正如你从sql小提琴中看到的那样,当case语句中的count应该是不同的时,count总是为20。我只是在我的案例陈述中做错了什么,还是我必须在子查询中做这些?
戴夫
答案 0 :(得分:6)
COUNT
都返回true。所以使用:
SUM(CASE ...)
而不是
COUNT(CASE ...)
答案 1 :(得分:2)
以下是另外两种选择:
(1)您可以使用COUNT(),但删除ELSE子句。这将导致NULL而不是0,因此不会计算它们。
(2)您也可以切换到数学运算:
SELECT SUM(Enrollment*Paperless*Validated) as <whatever>,
SUM(Enrollment*(1-PaperLess)*Validated) as <something else>
就个人而言,我经常喜欢乘法形式,因为语句较短,我可以更经常地看到所有条件而无需滚动。