所以我的数据看起来像这样。含义是ID 123的第一个支付期为1(一月),最后一个支付期为12(十二月)。 ID 456从3月3日开始,到12月结束。...之间还有其他几个月,我不想打字,但请假装所有这些记录都在那里。
ID Pay Period
123 1
456 3
...
123 12
456 12
我正在尝试编写将执行以下操作的代码。首先找到最低和最高工资期。找到这些后,我要让我的案例表达式说,如果第一个最低工资期大于1,而最后一个工资期是12,则意味着他们从年中开始工作直到12月,我想考虑他们是“新员工”。如果他们从1月开始并一直工作到12月,那么他们就是我所说的“ 12个月员工”。
但是下面的代码将每个人称为新员工。我做错了什么?
select empee_ID,
case
when min_pay_rng > 1 and max_pay_rng = 12 or max_pay_rng = 26 then 'New_Emp'
else '12 Mnth Emp'
end
from
(select empee_ID, min(payr_rng) as min_pay_rng, max(payr_rng) as max_pay_rng
from Data
where 1=1
and empee_ID in (123,456)
group by empee_ID
) pay_range
我的结果看起来像这样
empee_ID (No column name)
123 New_Emp
456 New_EmP
而且我希望他们看起来像这样
empee_ID (No column name)
123 12 Mnth Emp
456 New_EmP
我不确定“ 26”的来源,但我认为您想要的逻辑是:
select empee_ID,
(case when min(payr_rng) > 1 and max(payr_rng) in (12, 26)
then 'New Employee'
when min(pay_rng) = 1 and max(payr_rng) in (12, 26)
then '12-Month'
else 'Former'
end)
from Data
where 1=1
and empee_ID in (123,456)
group by empee_ID;
此代码实际上有一个错误。从年底开始开始12个薪酬期的每两周支付一次的员工将不被称为“新员工”。您的数据没有足够的信息来区分这种情况,除非您有日期或其他信息。