首页 > 解决方案 > t-SQL - 确定员工工作的天数 - 在现有代码中(计算员工每个期间的 FTE 数量)

问题描述

我的目标是计算全职等效人员 (FTE) 的数量 - 全职和兼职 - 每个工作期间

我有以下代码来计算按地区和状态(FT=1/PT=2)分组的员工人数 FT/PT:

代码 1(主要):

DECLARE @MonthBOP date = '07-01-2017'
DECLARE @MonthEOP date = '09-30-2018'
DECLARE @GLRegionsWHID int = 705
DECLARE @GLProgramsWHID int = -1

SELECT 
   glrn.WHID AS [RegionID]
  ,dol.WHID  AS [StatusType]
  ,COUNT (*) AS [CountClients]

FROM [WH].[Dimension].[PaycomEmployee] empl
INNER JOIN Dimension.PaycomDOLStatus dol ON empl.PaycomDOLStatusFK = dol.WHID
INNER JOIN Dimension.PaycomDepartment dept ON empl.PaycomDepartmentFK = dept.WHID
INNER JOIN Dimension.GLProgram glpgm ON dept.GLProgramFK = glpgm.WHID
INNER JOIN Dimension.GLRegion glrn ON glpgm.GLRegionFK = glrn.WHID

WHERE 

((dol.WHID IN (1,2)))
AND ((glrn.WHID IN (@GLRegionsWHID)) OR (-1 IN (@GLRegionsWHID)))
AND ((glpgm.WHID IN (@GLProgramsWHID)) OR (-1 IN (@GLProgramsWHID)))

GROUP BY
    glrn.WHID
   ,dol.WHID

结果如下(如下):

在此处输入图像描述

但我还有另一个代码部分,它决定了 - 员工工作时间:

代码 2:

Min(@MonthEOP, empl.DateTerminated) - Max(@MonthBOP, empl.DateHired) + 1 =
 [Number Days employed in Period]
WHERE empl.DateTerminated > @MonthBOP 

我的问题是 - 如何正确组合主代码(代码 1)和附加部分(代码 2) - 所以它们都在一个代码中,或者 - 代码 1 中的任何类型的引用到代码 2

我的目标是确定员工工作期并将其纳入代码 1(主要)

谢谢你的帮助!

标签: sql-servertsqlssms

解决方案


您不能使用MIN()MAX()像在 code2 中那样使用。

改为使用CASE

CASE
    WHEN @MonthBOP > empl.DateTerminated THEN @MonthBOP
    WHEN @MonthEOP < empl.DateTerminated THEN @MonthEOP
    ELSE empl.DateTerminated
END
-
CASE
    WHEN @MonthEOP < empl.DateHired THEN @MonthEOP
    WHEN @MonthBOP > empl.DateHired THEN @MonthBOP
    ELSE empl.DateHired
END
    AS [Number Days employed in Period]

推荐阅读