2017-06-07 51 views
0

我想寻求帮助的特定值,我想只从一个单一的列数为2种条件下2个特定值的记录数,但是:计数属于同一列的SQL Server

计数记录第一:

计数(服务)联系人

service | state | address 
service1| 1  |123 
service2| 1  |321 
service3| 3  |332 
service1| 2  |333 
service2| 2  |111 
service3| 3  |333 

第一个结果

Service | Contacts | status 
service1| 1  | 1 
service1| 1  | 2 
service1| 1  | 3 
service2| 1  | 1 
service2| 1  | 2 
service2| 1  | 3 

如果状态= 1和2,然后添加数否则为0(只算谁的“状态”等于1和2

结果:

最终结果

​​

抱歉混乱 感谢您很大的帮助

+1

您可以将(服务3,3,3)添加到表数据中,还可以调整预期的结果。 – jarlh

+0

谢谢你的快速回答。但我忘了提及,列“联系人”只是来自count(X)查询。 –

回答

1

这应该为所有主流数据库上工作

SELECT service, 
SUM(CASE WHEN status IN(1,2) THEN contacts ELSE 0 END) as Contacts 
FROM (your query) as x 
GROUP BY service 
+0

谢谢!我忘了提及,列联系人只来自一个计数(查询) –

0
select service, 
     sum(case when status in(1,2) then contacts else 0 end) as contact_count 
from MyTable 
group by service 

这将做什么是评估每一行,并在sum中包含contacts值,其中状态是必需的。因为它是一个聚合,所以您需要按表service

+0

尽管此代码可能有助于解决问题,但它并不解释_why_和/或_how_它回答了问题。提供这种附加背景将显着提高其长期价值。请[编辑]您的答案以添加解释,包括适用的限制和假设。 –