SQL 服务器将 Where 子句添加到视图中?

SQL Server Adding a Where clause into a view?

我有这样的看法:

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]
GROUP BY e.[EmployeeID];
GO

holidayRequestform table 看起来像这样。

 EmployeeID  | HoursTaken     | YearRequested  | MonthRequested |
 ------------+----------------+ ---------------+----------------+
 1           | 8              | 2018           |06
 1           | 16             | 2019           |01
 2           | 8              | 2019           |01
 3           | 8              | 2018           |01

当我select查看时,结果如下:

EmployeeID|HoursTaken
----------+----------
 1        |24
 2        |8
 3        |8

但是我只想让视图计算当年(2019 年)的 hoursTaken,同时仍保留前几年的记录。

我试过在视图中插入一个 WHERE YearRequested = YEAR(GETDATE()) 子句,但我不确定我应该把它放在哪里。

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]
WHERE YearRequested = YEAR(GETDATE()) 
GROUP BY e.[EmployeeID];
GO

--SELECT SQL 中的 CLAUSE 按此顺序

SELECT
Columns
FROM TABLEA 
WHERE 
GROUP BY
ORDER BY

答案是

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]
WHERE hrf.YearRequested = YEAR(GETDATE())
GROUP BY e.[EmployeeID];
GO

** 只是提示您的视图名称。给它起一个表明年份过滤器的名字