Sql server 2005 向T-sql左外部联接查询添加where子句时出现问题
我想要的基本功能是检索表dbo.EmployeeInfo中的所有记录,而不管表dbo.EmployeeInfo中是否存在相应的记录。如果EmployeeInfo中的一行在LeaveApplications中没有相关行,我希望将其SUMdbo.LeaveApplications.DaysaoAuthorized AS DaysTaken列返回为NULL,或者甚至可以将其置为0 通过上面的查询,如果我删除where条件,我就能够实现我想要的,但问题是,我还希望仅当ApplicationDate在当前年份时,才从LeaveApplication返回相关行 现在添加了where条件,我只能从EmployeeInfo中获取行,前提是它们在LeaveApplications中有相应的行,但我只希望EmployeeInfo中的行都是行。您可以在where子句中添加NULL测试,这可能会导致您的总和对于LeaveApplications表中不存在的行也返回NULL:Sql server 2005 向T-sql左外部联接查询添加where子句时出现问题,sql-server-2005,tsql,Sql Server 2005,Tsql,我想要的基本功能是检索表dbo.EmployeeInfo中的所有记录,而不管表dbo.EmployeeInfo中是否存在相应的记录。如果EmployeeInfo中的一行在LeaveApplications中没有相关行,我希望将其SUMdbo.LeaveApplications.DaysaoAuthorized AS DaysTaken列返回为NULL,或者甚至可以将其置为0 通过上面的查询,如果我删除where条件,我就能够实现我想要的,但问题是,我还希望仅当ApplicationDate在当前
如果没有相应的应用程序,您希望发生什么?对于返回的行,它应该在where子句中执行什么操作?如果没有LeaveApplications,我仍然希望返回EmployeeInfo中的所有行,然后为dbo.LeaveApplications.DaysaoAuthorized查询结果列指定一个NULL值甚至0。可能是我应该添加,即使LeaveApplications中有0个相关行,我仍然希望检索EmployeeInfo中的所有记录,然后为每个返回行的DaysauAuthorized列显示0。
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
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