SQL Server Добавление предложения Where в представление? - PullRequest
0 голосов
/ 09 января 2019

У меня есть этот вид:

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 выглядит примерно так.

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

Когда я выбираю представление, результаты выглядят следующим образом:

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

Однако я хотел бы иметь только представление Рассчитать часы, занятые на текущий год (2019), сохраняя при этом записи предыдущих лет.

Я попытался вставить предложение WHERE YearRequested = YEAR(GETDATE()) в представление, но я не уверен, куда бы я его поместил.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Ответ таков:

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

** просто подсказка для имени вашего представления. Дайте ему имя, которое указывает на фильтр года

0 голосов
/ 09 января 2019
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 CLAUSE в SQL находится в следующем порядке

SELECT
Columns
FROM TABLEA 
WHERE 
GROUP BY
ORDER BY
...