【发布时间】:2020-02-07 23:39:20
【问题描述】:
我正在尝试将服务列表与每个服务中的申请人数量组合在一起,但我还需要计算每个申请人所处的状态。
申请人表
serviceID clientID applicantID status
----------------------------------------------------
1 41 1 1 (Processing)
1 41 16 1 (Processing)
1 41 15 2 (Ready)
2 41 12 1 (Processing)
2 41 18 3 (Complete)
服务表:
serviceID serviceName
--------------------------
1 Full Service
2 Part Service
结果需要如下所示:
serviceName totalApplicants processingCount readyCount completeCount
---------------------------------------------------------------------------
Full Service 3 2 1 0
Part Service 2 1 0 1
我有以下内容,但它在每一列中返回相同的计数:-
SELECT
Services.serviceName,
(COUNT(Applicants.applicantID)) AS totalApplicants,
ISNULL(SUM(CASE WHEN Applicants.status = 1 THEN 1 ELSE 0 END), 0) AS processingCount,
ISNULL(SUM(CASE WHEN Applicants.status = 2 THEN 1 ELSE 0 END), 0) AS readyCount,
ISNULL(SUM(CASE WHEN Applicants.status = 3 THEN 1 ELSE 0 END), 0) AS completeCount
FROM
Applicants
LEFT JOIN
Services ON Applicants.serviceID = Services.serviceID
WHERE
Applicants.clientID = @CompanyID
GROUP BY
Services.serviceName
【问题讨论】:
-
请用您正在使用的数据库标记您的问题。
-
@Sherry8212 。 . .您的查询看起来不错,因为 tit 不应该在列中返回相同的值。
-
刚刚用 Gordon 查询测试了你的数据,它工作正常:sqlfiddle.com/#!18/9eecb/73251