SQL COUNT个特定行,具体取决于不同的ID

时间:2017-11-22 09:26:03

标签: sql count

目前我有两个计数功能,1显示所有记录的计数,包括NULLS,另一个只显示具有值的记录。我希望能够计算pcf.ID的记录数,具体取决于它是哪个ca.ServiceID。所以例如,我只想计算pcf.IDs - 7,14,15,25为ca.ServiceID - 71.不确定这是否是我可以使用案例或从哪里开始。这可能在一个查询中吗?我需要将这些信息放入SSRS中的Matrix中,同时显示所有服务,不确定这是否对如何处理有任何不同。任何帮助都将受到大力赞赏:)

目前,第一个计数,计算所有记录和第二个计数,计算所有具有值的计数。我希望它根据服务ID计算值,如下所示。 如果serviceID为71,则只计算pcf.ID为7,14,15,25等的行,并返回计数值。并为所有不同的ServiceID执行此操作。

SELECT
 COUNT(*)AS [CountAll]
,(COUNT(pcfd.LookupId) + (COUNT(pcfd.TextValue))) As [Answered]
,pcf.ID AS [Field_ID]
,ca.CourseID
,pcf.Label
,pcfd.TextValue
,pcfd.LookupId
,cs.ContractID
,Contract.Name AS [Contract Name]
,Service.Name AS [Service Name]
,ca.ServiceID
,p.ID
FROM
pcfd
INNER JOIN pcf
  ON pcfd.pcfID = pcf.ID
INNER JOIN p
  ON pcfd.pID = p.ID
INNER JOIN ca
  ON p.ID = ca.pID
INNER JOIN Service
  ON ca.ServiceID = Service.ID
INNER JOIN cs
  ON Service.ID = cs.ServiceID
INNER JOIN Contract
  ON cs.ContractID = Contract.ID
WHERE pcf.ID IN (7,14,15,25,12,8,24,23,22)
GROUP BY ca.pID
,ca.CourseID
,pcf.Label
,pcfd.TextValue
,pcfd.LookupId
,p.ID
,ca.ServiceID
,cs.ContractID
,cs.ServiceID
,Service.ID
,Contract.Name
,Service.Name
,pcf.ID

1 个答案:

答案 0 :(得分:0)

您可以添加到select语句

,SUM(CASE WHEN  pcf.IDs IN ( 7,14,15,25) AND  ca.ServiceID = 71 THEN 1 ELSE 0 END) AS CountField