подсчет итогов после левого соединения и требование 0 для переменной NULL - SQL Сервер - PullRequest
1 голос
/ 08 июля 2020

Я использую 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 дает мне идентификатор (одна строка для каждого человека), Таблица 2 дает мне все встречи в разные дни для каждого человека.

Я получаю следующие результаты:

ID  TOTAL_APPOINTMENTS
1         12
2         3

Но хотелось бы:

ID  TOTAL_APPOINTMENTS
1         12
2         3
3         0

Подскажите, пожалуйста?

1 Ответ

0 голосов
/ 08 июля 2020

Переместите условия WHERE из таблицы second в предложение 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);

Обратите внимание, что условия в таблице first остаются в предложении WHERE. Кроме того, IN проще, чем набор условий OR.

...