我有这个查询:
SELECT fksiteID, SUM(SearchTypePerson) +
SUM(SearchTypeLocker) +
SUM(SearchTypeSpotRandom) +
SUM(SearchTypePersVehicle) +
SUM(SearchTypeVisitorContractorVehicle) +
SUM(SearchTypeCompanyVehicle) +
SUM(SearchTypeToilet) +
SUM(PatrolExternal) +
SUM(PatrolCarPark) +
SUM(PatrolPerimeter) +
SUM(PatrolInternal) +
SUM(VehicleCheckAmbientLine) +
SUM(VehicleCheckFridgeLine) +
SUM(VehicleCheckSealChecks) +
SUM(OtherChecksIDCards) +
SUM(OtherChecksIncidentReports) +
SUM(OtherChecksColdStoreChecks) AS NumChecks
FROM [AIP].[dbo].[AAHOfficerDailyActivityReport]
WHERE MonthOfReport = 6 AND RecordIsDeletedYN = 0 AND fkSiteID in (945,947,948,949,950,951,952)
GROUP BY fkSiteID
Run Code Online (Sandbox Code Playgroud)
这给出了这个结果:
fksiteID NumChecks
945 228
947 27
949 58
951 67
952 1015
Run Code Online (Sandbox Code Playgroud)
但是我希望它返回:
fksiteID NumChecks
945 228
947 27
948 0
949 58
950 0
951 67
952 1015
Run Code Online (Sandbox Code Playgroud)
此查询的结果将为饼图提供数据,该饼图将显示每个站点完成的检查次数的细分,我需要将未完成检查的站点显示为零条目。
这是 AAHOfficerDailyActivityReport 表的原始数据:
AAHOfficerDailyActivityReportID fkUserID fkSiteID ShiftType DateOfReport MonthOfReport SearchTypePerson SearchTypeLocker SearchTypeSpotRandom SearchTypePersVehicle SearchTypeVisitorContractorVehicle SearchTypeCompanyVehicle SearchTypeToilet PatrolExternal PatrolCarPark PatrolPerimeter PatrolInternal VehicleCheckAmbientLine VehicleCheckFridgeLine VehicleCheckSealChecks OtherChecksIDCards OtherChecksIncidentReports OtherChecksColdStoreChecks RecordIsDeletedYN
1 1 945 Day 2019-05-18 00:00:00.000 5 3 3 3 3 3 3 3 4 4 4 4 2 2 2 5 5 5 0
2 1 948 Day 2019-05-17 01:30:00.000 5 3 3 3 3 3 3 3 4 4 4 4 2 2 2 5 5 5 0
3 476 945 Day 2019-05-20 00:00:00.000 5 8 0 0 0 0 8 0 0 0 0 0 0 0 0 150 2 0 1
4 476 951 Day 2019-05-31 00:00:00.000 5 0 0 0 0 0 0 0 0 2 0 0 2 0 2 3 0 24 0
5 428 952 Day 2019-06-01 00:00:00.000 6 3 3 0 0 0 0 3 3 3 3 0 0 0 0 0 0 0 0
6 450 951 Night 2019-05-31 00:00:00.000 5 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 24 0
7 479 947 Night 2019-05-31 06:10:06.070 5 0 0 0 7 0 0 0 0 0 0 0 0 0 0 8 0 0 0
8 450 0 Day 2019-06-01 00:00:00.000 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 24 0
9 450 951 Day 2019-06-02 04:45:00.000 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 24 0
10 459 952 Day 2019-06-02 00:00:00.000 6 0 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 1
11 459 952 Day 2019-06-02 15:15:00.000 6 56 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 1
12 459 952 Day 2019-06-02 15:15:00.000 6 56 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 1
13 459 952 Day 2019-06-02 15:15:00.000 6 0 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 1
14 459 0 Day 2019-06-02 15:22:43.553 6 0 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 0
15 459 952 Day 2019-06-02 15:26:00.000 6 0 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 1
16 459 952 Day 2019-06-03 00:00:00.000 6 120 2 0 0 0 0 3 3 0 0 0 0 0 0 18 0 0 0
17 459 952 Day 2019-06-03 14:31:00.000 6 120 2 0 0 0 0 3 3 0 0 0 0 0 0 18 0 0 1
18 535 952 Day 2019-06-03 15:42:12.380 6 55 3 0 0 0 10 3 3 3 3 0 0 0 0 18 0 0 0
19 541 952 Day 2019-06-03 15:44:34.177 6 55 3 0 0 0 10 3 3 3 3 0 0 0 0 18 0 0 0
20 459 952 Day 2019-06-03 00:00:00.000 6 120 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 0
21 479 947 Night 2019-06-02 06:11:00.000 6 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 0 0
22 428 952 Night 2019-06-04 00:00:00.000 6 2 4 0 0 0 0 4 4 4 4 0 0 0 0 0 0 0 0
23 479 947 Night 2019-06-03 00:00:00.000 6 0 0 0 7 0 0 0 0 1 0 0 0 0 0 9 0 0 1
24 438 945 Day 2019-06-04 00:00:00.000 6 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25 476 947 Day 2019-06-03 09:27:00.000 6 0 0 0 0 0 10 0 0 0 0 0 0 0 0 4 0 0 1
26 476 947 Day 2019-06-03 09:27:00.000 6 7 0 0 0 0 10 0 0 0 0 0 0 0 0 4 0 0 1
27 535 952 Day 2019-06-04 00:00:00.000 6 70 3 0 0 0 10 3 3 3 3 0 0 0 0 18 0 0 0
28 541 952 Day 2019-06-04 00:00:00.000 6 70 3 0 0 0 10 3 3 3 3 0 0 0 0 18 0 0 0
29 438 945 Day 2019-06-04 00:00:00.000 6 0 0 0 7 0 33 1 0 0 0 0 0 10 0 16 0 0 0
30 438 945 Day 2019-06-04 00:00:00.000 6 0 0 0 7 0 33 1 0 0 0 0 0 10 0 16 0 0 0
31 476 947 Day 2019-06-04 00:00:00.000 6 0 0 0 5 0 0 0 0 2 0 0 0 0 0 1 0 0 0
32 428 952 Night 2019-06-05 00:00:00.000 6 25 4 0 0 0 0 4 4 4 4 0 0 0 0 0 0 0 0
33 422 945 Night 2019-06-04 00:00:00.000 6 0 0 0 3 0 2 1 4 4 4 0 0 0 0 4 0 0 0
34 479 947 Night 2019-06-04 00:00:00.000 6 0 0 0 7 0 0 0 0 1 0 0 0 0 0 5 0 0 1
35 364 949 Night 2019-06-05 00:00:00.000 6 5 0 0 3 0 0 0 3 3 3 0 0 0 0 20 0 0 0
36 476 947 Day 2019-06-05 13:52:27.423 6 0 0 0 7 0 0 0 0 2 0 0 0 0 0 6 0 0 0
37 541 952 Day 2019-06-05 00:00:00.000 6 60 3 0 0 0 10 3 3 3 3 0 0 0 0 18 0 0 0
38 535 952 Day 2019-06-05 00:00:00.000 6 60 3 0 0 0 10 3 3 3 3 0 0 0 0 18 0 0 0
39 364 949 Day 2019-06-05 00:00:00.000 6 0 0 0 6 0 0 0 1 1 1 0 0 0 0 12 0 0 0
40 476 951 Day 2019-06-05 00:00:00.000 6 0 0 0 0 0 0 0 0 0 0 0 3 2 3 7 0 24 0
41 438 945 Day 2019-06-05 00:00:00.000 6 0 0 0 7 0 30 1 0 0 0 0 0 10 0 16 1 0 0
Run Code Online (Sandbox Code Playgroud)
我查看了 Stack Exchange 并使用该NULLIF
功能似乎可能会有所帮助,但我无法让它与此查询一起使用。
以下代码通过外部连接必须出现在输出中的站点列表来生成您想要的结果,数据查询的结果按站点 ID 分组。
SELECT
Sites.fkSiteID,
NumChecks = ISNULL(Totals.NumChecks, 0)
FROM (VALUES (945),(947),(948),(949),(950),(951),(952)) AS Sites (fkSiteID)
LEFT JOIN
(
SELECT
AODAR.fkSiteID,
NumChecks =
SUM(AODAR.SearchTypePerson) +
SUM(AODAR.SearchTypeLocker) +
SUM(AODAR.SearchTypeSpotRandom) +
SUM(AODAR.SearchTypePersVehicle) +
SUM(AODAR.SearchTypeVisitorContractorVehicle) +
SUM(AODAR.SearchTypeCompanyVehicle) +
SUM(AODAR.SearchTypeToilet) +
SUM(AODAR.PatrolExternal) +
SUM(AODAR.PatrolCarPark) +
SUM(AODAR.PatrolPerimeter) +
SUM(AODAR.PatrolInternal) +
SUM(AODAR.VehicleCheckAmbientLine) +
SUM(AODAR.VehicleCheckFridgeLine) +
SUM(AODAR.VehicleCheckSealChecks) +
SUM(AODAR.OtherChecksIDCards) +
SUM(AODAR.OtherChecksIncidentReports) +
SUM(AODAR.OtherChecksColdStoreChecks)
FROM dbo.AAHOfficerDailyActivityReport AS AODAR
WHERE
AODAR.MonthOfReport = 6
AND AODAR.RecordIsDeletedYN = 0
GROUP BY
AODAR.fkSiteID
) AS Totals
ON Totals.fkSiteID = Sites.fkSiteID
ORDER BY
Sites.fkSiteID;
Run Code Online (Sandbox Code Playgroud)
结果:
SELECT
Sites.fkSiteID,
NumChecks = ISNULL(Totals.NumChecks, 0)
FROM (VALUES (945),(947),(948),(949),(950),(951),(952)) AS Sites (fkSiteID)
LEFT JOIN
(
SELECT
AODAR.fkSiteID,
NumChecks =
SUM(AODAR.SearchTypePerson) +
SUM(AODAR.SearchTypeLocker) +
SUM(AODAR.SearchTypeSpotRandom) +
SUM(AODAR.SearchTypePersVehicle) +
SUM(AODAR.SearchTypeVisitorContractorVehicle) +
SUM(AODAR.SearchTypeCompanyVehicle) +
SUM(AODAR.SearchTypeToilet) +
SUM(AODAR.PatrolExternal) +
SUM(AODAR.PatrolCarPark) +
SUM(AODAR.PatrolPerimeter) +
SUM(AODAR.PatrolInternal) +
SUM(AODAR.VehicleCheckAmbientLine) +
SUM(AODAR.VehicleCheckFridgeLine) +
SUM(AODAR.VehicleCheckSealChecks) +
SUM(AODAR.OtherChecksIDCards) +
SUM(AODAR.OtherChecksIncidentReports) +
SUM(AODAR.OtherChecksColdStoreChecks)
FROM dbo.AAHOfficerDailyActivityReport AS AODAR
WHERE
AODAR.MonthOfReport = 6
AND AODAR.RecordIsDeletedYN = 0
GROUP BY
AODAR.fkSiteID
) AS Totals
ON Totals.fkSiteID = Sites.fkSiteID
ORDER BY
Sites.fkSiteID;
Run Code Online (Sandbox Code Playgroud)