计算左联接后的总数,并且NULL变量需要0-SQL Server



我正在使用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条件更简单。

最新更新