Требуется некоторая помощь в том, что, вероятно, является довольно простой проблемой, но из-за этой формулировки мне трудно определить, был ли задан похожий вопрос.
На SQL Сервер У меня 3 таблицы:
Colleague (ColleagueID (INT), Name (NVARCHAR), Branch
) Module (ModuleID (INT), Course (NVARCHAR), DueDate)
ModuleCompletion (RecordID (INT), Colleague (NVARCHAR), Module (NVARCHAR)
Это быстро построенный набор таблиц, основанный на ранее собранные данные, которые компания хранила в Excel, например, Матрица рабочего листа (Коллеги вниз Y) и (Модули по X) и 1 для выполненных и 0 для не завершенных.
Я взял все 1 и загрузил их в таблицу ModuleCompletion, чтобы отследить, кто что закончил.
В настоящее время нет внешних ключей, связывающих таблицы, и нет UNIQUES et c.
Примеры таблиц:
Коллега
ID Name Branch
-----------------
1 xyz HO
2 abc HO
3 tuv HO
4 efg Branch1
Модуль
ID Course DueDate
-----------------------
1 Co1 2019-12-31
2 Co2 2020-01-30
ModuleCompletion
ID Colleague Module
-----------------------
1 xyz Co1
2 xyz Co2
3 abc Co1
4 tuv Co2
Я надеюсь получить следующее:
Module Branch Colleague
--------------------------
Co1 HO tuv
Co1 Branch1 efg
Co2 HO abc
Co2 Branch1 efg
Результирующий набор должен содержать каждую комбинацию филиала и коллеги, не указанную в модуле в * 1041. * table.
Использование:
SELECT c.Branch, c.Name
FROM Colleague c
LEFT JOIN ModuleCompletion x ON x.Colleague = c.Name
WHERE x.Colleague IS NULL
ORDER BY c.Branch, c.Name
Отображает имена всех филиалов и коллег, где они не закончили никаких курсов, например, имя коллеги никогда не появляется в таблице ModuleCompletion
, но мне это нужно проверить по модулю.
Любая помощь будет оценена.