Я использую MSSQL Server 2008.
У меня есть три таблицы следующим образом:
Таблица: Project
Столбцы: ProjectID, {Primary Key} ProjectNickName, BusinessType
Таблица: Аудит
Столбцы: {внешний ключ} ProjectNickName, {первичный ключ} AuditID, AuditCreationDate, AuditStatus
Таблица: Результаты
Столбцы: {Внешний ключ} AuditID, FindingStatus, {Первичный ключ} FindingNumber
Проект для аудита: один ко многим
Аудит результатов: один ко многим
Я хочу найти все записи аудита с AuditStatus «Open», которые не имеют результатов с «Open» FindingStatus. Кроме того, запись аудита должна быть связана с проектом, для которого BusinessType имеет значение «Внешний», а AuditCreationDate находится в течение последних 30 дней.
Вот что у меня есть:
Select a.AuditID, p.BusinessType, p.ProjectNickName, a.AuditCreationDate
FROM Project p
INNER JOIN Audit a ON p.ProjectNickName = a.ProjectNickName
LEFT OUTER JOIN Findings f on a.AuditID = f.AuditID
WHERE p.BusinessType LIKE 'External' AND AuditCreationDate >= GETDATE()-30
AND a.AuditStatus LIKE 'OPEN' and f.FindingStatus NOT LIKE 'OPEN'
С указанным выше запросом связаны две проблемы.
- Для каждого аудита может быть несколько результатов, но если какой-либо из этих результатов имеет статус «Открыть», я не хочу, чтобы эта запись отображалась.
- Выше не показаны отдельные записи аудита. Если для аудита есть несколько результатов, которые не имеют статуса «Открыто», он покажет их. Я хочу только отдельные записи аудита. Я посмотрел на следующий DISTINCT только для одного столбца , который решил эту проблему, но контрольная запись все равно показала бы, если бы был хотя бы один результат, у которого не было «Open» FindStatus, а другой результат, связанный с аудит, который ДЕЙСТВИТЕЛЬНО имеет 'Открытый' findStatus.
Как упоминалось ранее, я хочу, чтобы в моем наборе результатов отображались только те аудиты, у которых нет записей о поиске с FindStatus 'Open'.
Полагаю, мне может понадобиться использовать какой-то вложенный запрос с отдельной функцией, но я пока не могу понять, как это сделать.
Любая помощь очень ценится! Я старался быть как можно более ясным и точным, но дайте мне знать, если смогу что-нибудь уточнить.