为什么我的 SQL 大小写表达式返回错误的结果?



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

最新更新