I am using SQL Server Management Studio 2012 and I am running the following query:
x
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)
I would like the total number of appointments for these 3 individuals for now. Then, I will include everyone in Table 1. Table 1 gives me the ID (one row per individual), Table 2 gives me all appointments across different days per individual.
The results I get are:
ID TOTAL_APPOINTMENTS
1 12
2 3
But I would like:
ID TOTAL_APPOINTMENTS
1 12
2 3
3 0
Can you please advise?
Advertisement
Answer
Move the WHERE
conditions on the second table to the ON
clause:
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);
Note that the conditions on the first table remain in the WHERE
clause. Also, IN
is simpler than a bunch of OR
conditions.