sql-server - 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(主要)
谢谢你的帮助!
解决方案
您不能使用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]
推荐阅读
- python - Juypter 笔记本显示空白页
- bash - 从函数中更新调用者的参数数组
- python - 同步和异步实现的代码重复
- ios - 带有 LargeTitles 的自定义 UINavigationBar 在 IB 中不起作用
- mysql - NodeJs 容器失去连接
- java - 对 Spring Boot 应用程序的 HTTP REST 调用不会在请求中没有 datetime 参数
- python - 在 Windows 上安装 SpaCy
- mysql - 错误 1115 (42000):未知字符集:连接上的“utf8mb4”
- c - C - 递归搜索函数找到键然后返回 NULL
- php - PHP:在转换日期格式时,使用 sprintf 加载数据 infile 时出现“%”问题