计算条件不同的地方

时间:2016-11-22 11:36:27

标签: sql-server-2012

我一直在努力优化我庞大的数据库视图之一。

目前,我只是使用5次子选择来获取公司ID的数量。

(Select count(id) from company table where prospecting.stage = 'qualify') as Qualify,
(Select count(id) from company table where prospecting.stage = 'targetted') as Targetted, 

每家公司经历了5个阶段,我只想根据公司位置在不同的列中计算每个阶段的公司数量。

我试图在一个选择中做到这一点,但我有点卡住了。

 SUM(COUNT(CASE WHEN prospecting.stage = 'Qualify' THEN '1' ELSE '0' END)) as [Qualified]
 SUM(COUNT(CASE WHEN prospecting.stage = 'Targetted' THEN '1' ELSE '0' END)) as [Targetted]

所以它最终会沿着这些方向寻找一些东西:

     Location | Stage: Qualify | Stage: Targetted | Stage 3 | Stage 4 | Stage 5 | Total

无法对包含聚合或子查询的表达式执行聚合函数。 -说得通。

所以我需要将每个阶段中的prospecting.stage ='XYZ'分成不同行的Company.ID计算在内。

有什么建议吗? :(

1 个答案:

答案 0 :(得分:1)

删除count函数,并在case表达式中将数据类型从char更改为int。您的表达式应如下所示:

  SUM(CASE WHEN prospecting.stage = 'Qualify' THEN 1 ELSE 0 END) as [Qualified]