我正在使用SQL Server Management Studio 2012,并且正在运行以下查询:
SELECT T1.ID, COUNT(DISTINCT T2.APPOINTMENT_DATE) AS [TOTAL_APPOINTMENTS]
FROM T1
LEFT JOIN T2
ON T1.ID = T2.ID
WHERE T2.APPOINTMENT_DATE > '2019-01-01' AND T2.APPOINTMENT_DATE < '2020-01-01'
AND (T1.ID = 1 OR T1.ID = 2 OR T1.ID = 3)
我想知道这3个人目前的预约总数。然后,我将把每个人都包括在表1中。表1给了我ID(每个人一行(,表2给了我每个人不同日期的所有预约。
我得到的结果是:
ID TOTAL_APPOINTMENTS
1 12
2 3
但我想要:
ID TOTAL_APPOINTMENTS
1 12
2 3
3 0
你能给我建议吗?
将第二个表上的WHERE
条件移动到ON
子句:
SELECT T1.ID, COUNT(DISTINCT T2.APPOINTMENT_DATE) AS [TOTAL_APPOINTMENTS]
FROM T1 LEFT JOIN
T2
ON T1.ID = T2.ID AND
T2.APPOINTMENT_DATE > '2019-01-01' AND
T2.APPOINTMENT_DATE < '2020-01-01'
WHERE T1.ID IN (1, 2, 3);
请注意,第一个表上的条件保留在WHERE
子句中。此外,IN
比一堆OR
条件更简单。