【发布时间】:2022-01-14 10:55:49
【问题描述】:
我需要从员工列表中获取过去 12 个月与当前月份相比减少或增加的工作时间、首发人员和离职人员。
我遇到的问题是我没有得到上个月的离职人员,但本月的工作时间为空,即所谓的离职人员。
这是我尝试过的:
WITH CURRENTbase AS
(
SELECT Employee, Work_hrs,monthdate
FROM MyTable
WHERE monthlydate >= '2020-mar-01'
),
PREVIOUSbase AS
(
SELECT Employee, Work_hrs,monthdate
DATEADD(MONTH,1,monthdate) monthdate
FROM MyTable
WHERE monthdate >= '2020-mar-01'
)
SELECT
B.*, A.*,
A.monthdate,
ISNULL(B.Work_hrs,0) PreviousHRS,
ISNULL(A.Work_hrs,0) CurrentHRS,
CASE
WHEN b.Work_hrs is null THEN 'Starter'
WHEN a.Work_hrs is null THEN 'Leaver'
WHEN a.Work_hrs > b.Work_hrs THEN 'hrs_Increase'
WHEN b.Work_hrs > a.Work_hrs THEN 'hrs_Decrease'
WHEN b.Work_hrs = a.Work_hrs THEN 'NoChange'
ELSE 'Check'
END Status
FROM CURRENTbase A
LEFT JOIN PREVIOUSbase B
ON A.Employee = B.Employee AND A.monthdate = B.monthdate
WHERE a.CensusDate >= '2020-apr-01'
GROUP BY
A.monthdate,
ISNULL(B.Work_hrs,0) PreviousHRS,
ISNULL(A.Work_hrs,0) CurrentHRS,
CASE
WHEN b.Work_hrs is null THEN 'Starter'
WHEN a.Work_hrs is null THEN 'Leaver'
WHEN a.Work_hrs > b.Work_hrs THEN 'hrs_Increase'
WHEN b.Work_hrs > a.Work_hrs THEN 'hrs_Decrease'
WHEN b.Work_hrs = a.Work_hrs THEN 'NoCHange'
ELSE 'check'
END
【问题讨论】:
-
另外,请告诉我们您如何知道 EMP1 是否已离开或本月只有零小时?
-
嗨 Filburt,我想主要查看以前和当前的工作时间值,然后我可以自己为状态创建一个案例声明。非常感谢。
标签: sql sql-server join