【发布时间】:2010-05-17 11:03:12
【问题描述】:
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 条件,只有当他们在 LeaveApplications 中有相应的行时才能从 EmployeeInfo 获取行,但我只想要 EmployeeInfo 中的所有行
【问题讨论】:
-
如果没有对应的
LeaveApplications,你想怎么办?返回行的 where 子句应该做什么? -
如果没有LeaveApplications,我还是想返回EmployeeInfo中的所有行,然后给dbo.LeaveApplications.DaysAuthorised查询结果列赋值NULL甚至0。
-
也许我应该补充一点,即使 LeaveApplications 中有 0 个相关行,我仍然想检索 EmployeeInfo 中的所有记录,然后为每个返回的行的“DaysAuthorised”列显示 0(零) .
标签: sql-server-2005 tsql