我在使用多个和的Case语句时遇到了问题。
我的数据库看起来像:
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:http://sqlfiddle.com/#!3/61202/5
正如您从sql小提琴中看到的那样,case语句中的计数始终为20,而它们应该是不同的。我只是在我的案例陈述中做错了什么,还是必须在子查询中这样做?
戴夫
发布于 2012-05-21 18:02:22
无论实际值如何,COUNT都返回true。因此,请使用:
SUM(CASE ...)而不是
COUNT(CASE ...)发布于 2012-05-21 18:11:35
以下是另外两种选择:
(1)您可以使用COUNT(),但删除use子句。这将导致零,而不是0,所以他们不会被计算。
(2)您还可以切换到数学操作:
SELECT SUM(Enrollment*Paperless*Validated) as <whatever>,
SUM(Enrollment*(1-PaperLess)*Validated) as <something else>就我个人而言,我经常喜欢乘法形式,因为语句更短,而且我可以更经常地看到所有的条件而不用滚动。
https://stackoverflow.com/questions/10690217
复制相似问题