繁体   English   中英

T-SQL SUM全部带条件计数

[英]T-SQL SUM All with a Conditional COUNT

我有一个查询,产生以下内容:

Team  | Member  |  Cancelled | Rate
-----------------------------------
  1     John         FALSE      150
  1     Bill         TRUE        10
  2     Sarah        FALSE      145
  2     James        FALSE      110
  2     Ashley       TRUE         0

我需要为被取消的团队选择虚假的成员数,以及不考虑被取消状态的费率之和……如下所示:

SELECT
    Team,
    COUNT(Member),    --WHERE Cancelled = FALSE
    SUM(Rate)         --All Rows
FROM
    [QUERY]
GROUP BY
    Team

因此结果将如下所示:

Team  |  CountOfMember | SumOfRate
----------------------------------
  1           1                160
  2           2                255

这只是一个例子。 实际查询具有多个复杂的联接。 我知道我可以对比率的总和进行一个查询,然后对计数进行另一个查询,然后将这两个结果结合在一起,但是有没有一种更简单的方法,它可以减少税费并且不会导致我复制并粘贴已经复杂的查询?

您需要一个有条件的总和,如下所示:

sum(case when cancelled = 'false' then 1 else 0 end)

使用sum()的原因。 sum()正在处理记录,并为每个记录添加一个值为01的值。 该值取决于cancelled的值。 如果为假,则sum()增加1计算此类值的数量。

您可以使用count()做类似的事情,像这样:

count(case when cancelled = 'false' then cancelled end)

这里的窍门是count()计算非NULL值的数量。 then子句可以是非NULL的任何内容cancelled ,常量1或其他字段。 如果没有其他值,则任何其他值都将变为NULL并且不计数。

我一直都喜欢sum()版本胜过count()版本,因为我认为它更明确。 在其他SQL方言中,有时可以将其缩短为:

sum(cancelled = 'false')

一旦习惯了,这很有道理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM