проблема при добавлении предложения where в запрос T-sql LEFT OUTER JOIN - PullRequest
0 голосов
/ 04 мая 2010
SELECT TOP (100) PERCENT dbo.EmployeeInfo.id, MIN(dbo.EmployeeInfo.EmpNo) AS EmpNo, 
            SUM(dbo.LeaveApplications.DaysAuthorised) AS DaysTaken
FROM  dbo.EmployeeInfo LEFT OUTER JOIN dbo.LeaveApplications ON 
           dbo.EmployeeInfo.id = dbo.LeaveApplications.EmployeeID
WHERE (YEAR(dbo.LeaveApplications.ApplicationDate) = YEAR(GETDATE()))
GROUP BY dbo.EmployeeInfo.id, dbo.EmployeeMaster.EmpNo
ORDER BY DaysTaken DESC 

Основная функциональность, которую я хочу, - это извлечь все записи в таблице dbo.EmployeeInfo, независимо от того, существует ли соответствующая запись в таблице dbo.LeaveApplications. Если строка в EmployeeInfo не имеет связанной строки в LeaveApplications, я хочу вернуть ее столбец SUM(dbo.LeaveApplications.DaysAuthorised) AS DaysTaken как NULL или даже можно поставить 0.

С помощью приведенного выше запроса, если я удалю условие where, смогу достичь того, чего хочу, но проблема в том, что я также хочу возвращать связанные строки из LeaveApplication, только если ApplicationDate находится в текущем году.

Теперь, когда добавлено условие where, я могу получить строки из EmployeeInfo, только если они имеют соответствующие строки в LeaveApplications, но я просто хотел, чтобы все строки были в EmployeeInfo

1 Ответ

0 голосов
/ 04 мая 2010

Вы можете добавить тест для NULL в предложении WHERE, это может привести к тому, что ваш SUM вернет NULL, а также для строк, которых нет в таблице LeaveApplications:

SELECT TOP (100) PERCENT dbo.EmployeeInfo.id, MIN(dbo.EmployeeInfo.EmpNo) AS EmpNo, 
            SUM(dbo.LeaveApplications.DaysAuthorised) AS DaysTaken
FROM  dbo.EmployeeInfo LEFT OUTER JOIN dbo.LeaveApplications ON 
           dbo.EmployeeInfo.id = dbo.LeaveApplications.EmployeeID
WHERE (YEAR(dbo.LeaveApplications.ApplicationDate) = YEAR(GETDATE()))
      OR dbo.LeaveApplications.ApplicationDate IS NULL
GROUP BY dbo.EmployeeInfo.id, dbo.EmployeeMaster.EmpNo
ORDER BY DaysTaken DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...