Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 向T-sql左外部联接查询添加where子句时出现问题_Sql Server 2005_Tsql - Fatal编程技术网

Sql server 2005 向T-sql左外部联接查询添加where子句时出现问题

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在当前

我想要的基本功能是检索表dbo.EmployeeInfo中的所有记录,而不管表dbo.EmployeeInfo中是否存在相应的记录。如果EmployeeInfo中的一行在LeaveApplications中没有相关行,我希望将其SUMdbo.LeaveApplications.DaysaoAuthorized AS DaysTaken列返回为NULL,或者甚至可以将其置为0

通过上面的查询,如果我删除where条件,我就能够实现我想要的,但问题是,我还希望仅当ApplicationDate在当前年份时,才从LeaveApplication返回相关行

现在添加了where条件,我只能从EmployeeInfo中获取行,前提是它们在LeaveApplications中有相应的行,但我只希望EmployeeInfo中的行都是行。您可以在where子句中添加NULL测试,这可能会导致您的总和对于LeaveApplications表中不存在的行也返回NULL:


如果没有相应的应用程序,您希望发生什么?对于返回的行,它应该在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