You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server视图添加WHERE子句:仅统计当年休假时长并保留员工记录

如何让视图仅计算当前年份的休假时长并保留所有员工记录

你遇到的问题很典型——直接在WHERE子句里加年份过滤会破坏左连接的效果,因为那些当年没有提交休假申请的员工,YearRequested字段是NULL,会被WHERE条件直接过滤掉,就看不到这些员工的记录了。

正确的做法是把年份过滤条件放到LEFT JOIN的ON子句里,这样只会匹配当前年份的休假记录,同时保留所有员工的行:

ALTER VIEW [dbo].[vw_HoursTakenPerEmployee] AS 
SELECT e.[EmployeeID], COALESCE(SUM(hrf.[HoursTaken]), 0) AS HoursTaken 
FROM [dbo].[Employee] e 
LEFT JOIN [dbo].[HolidayRequestForm] hrf 
  ON e.[EmployeeID] = hrf.[EmployeeID]
  AND hrf.YearRequested = YEAR(GETDATE()) -- 把年份条件放到这里!
GROUP BY e.[EmployeeID]; 
GO

为什么这么做?

  • 当条件放在JOIN的ON子句时,SQL只会在关联两张表的时候筛选出当前年份的休假记录,没有匹配到的员工行依然会保留,只是hrf相关的字段为NULL。
  • 再通过COALESCE(SUM(hrf.[HoursTaken]), 0),把NULL的求和结果转换成0,完美满足“保留所有员工+仅统计当前年份时长”的需求。

修改后的查询结果(以2019年为例):

EmployeeIDHoursTaken
116
28
30

内容的提问来源于stack exchange,提问作者Conor8630

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:38:38