首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Case语句中使用多个和s而不是子查询

在Case语句中使用多个和s而不是子查询
EN

Stack Overflow用户
提问于 2012-05-21 18:00:26
回答 2查看 582关注 0票数 2

我在使用多个Case语句时遇到了问题。

我的数据库看起来像:

代码语言:javascript
复制
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

所以我的查询如下:

代码语言:javascript
复制
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,而它们应该是不同的。我只是在我的案例陈述中做错了什么,还是必须在子查询中这样做?

戴夫

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-21 18:02:22

无论实际值如何,COUNT都返回true。因此,请使用:

代码语言:javascript
复制
SUM(CASE ...)

而不是

代码语言:javascript
复制
COUNT(CASE ...)
票数 6
EN

Stack Overflow用户

发布于 2012-05-21 18:11:35

以下是另外两种选择:

(1)您可以使用COUNT(),但删除use子句。这将导致零,而不是0,所以他们不会被计算。

(2)您还可以切换到数学操作:

代码语言:javascript
复制
SELECT SUM(Enrollment*Paperless*Validated) as <whatever>,
       SUM(Enrollment*(1-PaperLess)*Validated) as <something else>

就我个人而言,我经常喜欢乘法形式,因为语句更短,而且我可以更经常地看到所有的条件而不用滚动。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10690217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档