У меня есть две таблицы.Один из них - посещаемость сотрудника, а второй - отпуск сотрудника.
- Кол. Посещаемости сотрудника (Empid, INTIME, OUTTIME, Status)
- Кол. Сотрудника (Empid, StartDate, Endate, lefttype (PL, CL, SL))
Я создал сводную таблицу, в которой упомянуто присутствие, отсутствие и HD, и создал еще один отдельный запрос на сумму строки (настоящее, отсутствие и HD) из таблицы EmployeeAttendance.
=== Запрос суммы ===
SELECT SUM(CASE WHEN status = 'P' THEN 1
WHEN status = 'HD' THEN 0.5 WHEN status = 'A' THEN 0 END) AS [T.P],
SUM(CASE WHEN status = 'A' THEN 1 WHEN status = 'HD' THEN 0.5 END) AS [A],
SUM(CASE WHEN status = 'P' THEN 1
WHEN status = 'HD' THEN 1 WHEN status = 'A' THEN 1 END) AS [TDay ]
FROM EmployeesAttendance
--WHERE (ReportingDate BETWEEN @StartDate AND @Enddate)
GROUP BY EmpID
=== Сводная таблица ===
для преобразования столбца в строку
SELECT DISTINCT ReportingDate INTO #Dates
FROM EmployeesAttendance
ORDER BY ReportingDate
DECLARE @cols NVARCHAR(4000)
SELECT @cols = COALESCE(@cols + ',[' + CONVERT(varchar, DATEPART(DAY, ReportingDate), 112)
+ ']','[' + CONVERT(varchar,DATEPART(DAY, ReportingDate), 112) + ']')
FROM #Dates
ORDER BY ReportingDate
DECLARE @qry NVARCHAR(4000) =
N'SELECT *
FROM (SElECT EmployeeDetails.EmpID,EmployeeDetails.EmpName,EmployeesAttendance.Status,
DATEPART(DAY, EmployeesAttendance.ReportingDate)as DDate
FROM EmployeesAttendance Inner Join EmployeeDetails on EmployeesAttendance.EmpID=EmployeeDetails.Empid )
emp
PIVOT (MAX(Status) FOR DDate IN (' + @cols + ')) AS stat
- Выполнение запроса
EXEC (@qry)
Я хочу этот регистр посещаемости сотрудника.
Date 1 2 3 4 5 Total Absent Present Leave
Emp1 P P A PL P 5 1 3 1
Emp2 Cl pl A PL P 5 1 2 2
Теперь я хочу объединить вышеуказанный запрос сумм и сводок, также упоминавшийсяоставьте тип в реестре посещаемости, если сотруднику предоставлен отпуск.