如何在员工出勤登记册中提及休假类型?

时间:2019-01-21 07:18:19

标签: sql-server tsql pivot dynamic-sql

我有两个桌子。一种是员工出勤,另一种是员工请假。

  • 员工出勤上校(Empid,INTIME,OUTTIME,Status)
  • 员工请假col(Empid,StartDate,Endate,leavetype(PL,CL,SL))

我创建了数据透视表,其中提到了存在,不存在和高清,并从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

===数据透视表===

用于将col转换为行

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 

现在我想合并以上关于Sum和Pivot的麻烦查询,还提到了如果雇员有空,则在出勤登记册中请假类型从01-01-2019到02-01-2019(emp2)等于2的Noofdays

0 个答案:

没有答案