Не могу понять, как добавить данные только там, где они есть.
У меня есть заявление, к которому я хотел бы добавить поля.Но вместо того, чтобы тянуть сотрудников только при соблюдении критериев (т. Е. Оператора WHERE), я хотел бы связать данные, если и только если они существуют.Мой базовый оператор извлекает 30 записей, но когда я добавляю больше деталей в свой оператор WHERE (чтобы включить другие поля), он уменьшает количество записей до 20. Как сохранить мои 30 записей, а также включает детали из отдельных таблиц (если онисуществовать)?
Мой базовый оператор - тянет 30 записей
SELECT DISTINCT EMPLOYEE_NUM "Employee #",
START_DATE "Start Date",
NAME "Employee Name"
FROM EMPLOYEES E
JOIN EMPLOYEE_DETAILS D ON D.EMPLOYEE_ID = E.EMPLOYEE_ID
WHERE D.START_DATE >= DATE '2016-12-14'
ORDER BY 1;
Выход Ex.
Employee # | Start Date | Employee Name
1234 12/15/2017 Jim Doe
1456 01/16/2017 John Dillin
5435 04/23/2017 Jane Mitchel
9876 09/12/2017 Joan Smith
7655 10/14/2017 Barry Gibb
...25 more records
Подробное заявление о включении дополнительных полей - только 20 записей
SELECT DISTINCT EMPLOYEE_NUM "Employee #",
START_DATE "Start Date",
NAME "Employee Name",
OS.ONBOARDING_LOCATION "On-boarding Location",
OS.COMPLETION_DATE "Completion Date"
FROM EMPLOYEES E
JOIN EMPLOYEE_DETAILS D ON D.EMPLOYEE_ID = E.EMPLOYEE_ID
JOIN ONBOARDING_STATUS OS ON OS.EMPLOYEE_ID = E.EMPLOYEE_ID
WHERE D.START_DATE >= DATE '2016-12-14'
AND OS.DESCRIPTION LIKE 'START'
AND OS.CANCELLED IS NULL
ORDER BY 1;
Пример вывода
Employee # | Start Date | Employee Name | On-boarding Location | Completion Date
1234 12/15/2017 Jim Doe Sacramento, CA 12/13/2017
1456 01/16/2017 John Dillin Atlanta, GA 01/19/2017
7655 10/14/2017 Barry Gibb Los Angeles, CA 10/17/2017
...17 more records
Вот то, что я пытался сделать, ноон только дублирует записи:
SELECT DISTINCT EMPLOYEE_NUM "Employee #",
START_DATE "Start Date",
NAME "Employee Name",
(CASE
WHEN OS.DESCRIPTION LIKE 'START' AND OS.CANCELLED IS NULL
THEN OS.ONBOARDING_LOCATION
ELSE NULL
END)"On-boarding Location",
(CASE
WHEN OS.DESCRIPTION LIKE 'START' AND OS.CANCELLED IS NULL
THEN OS.COMPLETION_DATE
ELSE NULL
END)"Completion Date"
FROM EMPLOYEES E
JOIN EMPLOYEE_DETAILS D ON D.EMPLOYEE_ID = E.EMPLOYEE_ID
JOIN ONBOARDING_STATUS OS ON OS.EMPLOYEE_ID = E.EMPLOYEE_ID
WHERE D.START_DATE >= DATE '2016-12-14'
ORDER BY 1;
Моя последняя попытка извлекает данные, но, похоже, не придерживается инструкции CASE WHEN и дублирует многие записи.Пожалуйста, дайте мне знать, если это не имеет смысла.Любая помощь или советы, которые вы можете предоставить, будут очень благодарны.
Заранее спасибо!