我的数据看起来像这样。这意味着ID 123的第一个支付期为1(1月(,最后一个支付期为12(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 个支付期不会被视为"新员工"。 您的数据没有足够的信息来区分这种情况,除非您有日期或其他信息。