Я пытаюсь выполнить задание, но получаю двойные значения. Я выбираю апрельский месяц в качестве стандартного для расчета оставшихся и затраченных дней. Для фильтрации праздников BenefitTypeID равен 1. Пожалуйста, помогите мне. Вот вопрос и запрос, которые я написал:
ДИАГРАММА ERD для базы данных находится по адресу SQL Server, эквивалентный GROUP_CONCAT ()
1.Number of benefits days allotted to each employee
2.Number of benefit days taken year-to-date
3.Number of benefit days remaining in the calendar year
4.Number of holidays allotted to each employee
5.Number of holidays taken year-to-date
6.Number of holidays remaining in the calendar year
Для этого задания напишите запрос, который дает результаты, описанные выше. Предположим, вы составляете отчет за 2013 календарный год. Как и в предыдущем отчете, в реальной жизни вы, вероятно, использовали бы функцию getdate () для определения текущей даты и запуска отчета с начала текущего года до настоящего времени. Однако для этого назначения вы можете жестко указать 2013 год в своем запросе и получить все данные за этот год.
SELECT
E.LastName+ ' '+E.FirstName As [Employee Name],
count (B.BenefitTypeID)as [No of Benefit Days],
SUM(CASE WHEN BT.BenefitTypeID='1' THEN 1 ELSE 0 END) As [Number of Holidays],
SUM(CASE WHEN B.BT_Month='4' AND B.BT_Year='2013' THEN 1 ELSE 0 END) As [Number of Days Taken],
SUM(CASE WHEN B.BT_Month!='4' and B.BT_Year!='2013' THEN 1 ELSE 0 END) As [Number of Days Remaining],
SUM(CASE WHEN BT.BenefitTypeID='1' and B.BT_Month='4' and B.BT_Year='2013' THEN 1 ELSE 0 END) As [Number of Holidays Taken],
SUM(CASE WHEN BT.BenefitTypeID='1' and B.BT_Month!='4' and B.BT_Year!='2013' THEN 1 ELSE 0 END) As [Number of Holidays Remaining]
FROM BenefitsTaken B
JOIN Employees E
ON( B.EmpID = E.EmpID )
LEFT Join BenefitTypes BT
ON(B.BenefitTypeID=BT.BenefitTypeID)
Group By E.LastName,E.FirstName,BT.BenefitTypeID,B.BT_Month,B.BT_Year
Вот результаты запроса. Имена сотрудников должны быть указаны один раз, спасибо
Employee Name No of Benefit Days Number of Holidays Number of Days Taken Number of Days Remaining Number of Holidays Taken Number of Holidays Remaining
------------------------------------------------------------- ------------------ ------------------ -------------------- ------------------------ ------------------------ ----------------------------
Doe James 1 0 1 0 0 0
Doe James 1 0 0 0 0 0
Jones Mark 2 2 0 0 0 0
Jones Mark 1 0 1 0 0 0
Jones Mark 1 0 0 0 0 0
Rice Luke 1 0 1 0 0 0
Rice Luke 1 0 0 0 0 0
Smith Matthew 1 1 1 0 1 0
Smith Matthew 1 0 1 0 0 0
(9 row(s) affected)