Мне нужно применить фильтр дат в строках, где OwningOfficeID и ScopeOfficeID не совпадают.Фильтрация строк, если значения двух столбцов не совпадают - sql server
Вот основной запрос;
SELECT distinct v.VisitID, a.OfficeID AS OwningOfficeID,
scp.OfficeID AS ScopeOfficeID, V.VisitDate,
a.staffID as OwningStaff ,scp.StaffID as OwningScope
FROM Visits v
INNER JOIN VisitDocs vdoc ON vdoc.VisitID = v.VisitID
INNER JOIN InspectionScope scp ON scp.ScopeID = v.ScopeID
INNER JOIN Assignments a ON a.AssignmentID = scp.AssignmentID
INNER JOIN Staff s ON s.StaffID = a.StaffID
WHERE
v.VisitType = 1 AND
--'SCOPE OWNER AND LOOK FOR INSPECTION REPORT BUT NOT FOR COORD/FINAL REPORT.
(scp.StaffID = 141
AND EXISTS(SELECT *
FROM VisitDocs d
WHERE d.VisitID = v.VisitID
AND d.docType = 13)
AND NOT EXISTS(SELECT *
FROM VisitDocs d
WHERE d.VisitID = v.VisitID AND d.docType IN (1,2))
)
OR
--'ASSIGNMENT OWNER AND NOT SCOPE OWNER AND LOOK FOR COORDINATOR REPORT.
(a.StaffID = 141 AND scp.StaffID != 141
AND EXISTS(SELECT *
FROM VisitDocs d
WHERE d.VisitID = v.VisitID
AND d.docType = 2)
AND NOT EXISTS(SELECT * FROM VisitDocs d
WHERE d.VisitID = v.VisitID AND d.docType IN (1))
)
Результат Набор
После условие может быть применено к наружному запроса на выборку для достижения результатов.
(OwningOfficeID <> ScopeOfficeID И VisitDate> = '01/11/2012' OR OwningOfficeID = ScopeOfficeID)
Есть в любом случае сделать это в одном операторе отбора?
Не смешивайте AND и OR без явного использования круглых скобок. – lilalinux
Вы можете записать условие более компактно как '((OwningOfficeID = ScopeOfficeID) ИЛИ (VisitDate> = '01/11/2012'))' – LSerni
Я хочу отобразить все строки, где OwningOfficeID = ScopeOfficeID ИЛИ OwningOfficeID <> ScopeOfficeID, но также необходимо применять фильтр даты в тех строках, где OwningOfficeID <> ScopeOfficeID – user1263981