我有一个表,如下:
CallID | CompanyID | OutcomeID
----------------------------------
1234 | 3344 | 36
1235 | 3344 | 36
1236 | 3344 | 36
1237 | 3344 | 37
1238 | 3344 | 39
1239 | 6677 | 37
1240 | 6677 | 37我想创建一个SQL脚本来计算销售结果的数量和所有其他尝试的数量(任何<> 36),类似于:
CompanyID | SalesCount | NonSalesCount
------------------------------------------
3344 | 3 | 1
6677 | 0 | 2有没有办法做一个包含像COUNT(CallID WHERE OutcomeID = 36)这样的条件的COUNT()?
发布于 2013-06-19 22:39:49
您可以将CASE表达式与聚合一起使用,以根据outcomeId值获得总计:
select companyId,
sum(case when outcomeid = 36 then 1 else 0 end) SalesCount,
sum(case when outcomeid <> 36 then 1 else 0 end) NonSalesCount
from yourtable
group by companyId;请参阅SQL Fiddle with Demo
发布于 2013-06-19 22:42:27
如下所示:
SELECT companyId,
COUNT(CASE WHEN outcomeid = 36 THEN 1 END) SalesCount,
COUNT(CASE WHEN outcomeid <> 36 THEN 1 END) NonSalesCount
FROM
yourtable
GROUP BY
companyId应该有效-- COUNT()只计算非空值。
发布于 2013-06-19 22:41:12
是。Count不计算空值,因此您可以这样做:
select
COUNT('x') as Everything,
COUNT(case when OutcomeID = 36 then 'x' else NULL end) as Sales,
COUNT(case when OutcomeID <> 36 then 'x' else NULL end) as Other
from
YourTable或者,您可以使用SUM,就像bluefeet演示的那样。
https://stackoverflow.com/questions/17194145
复制相似问题