为什么我的SQL case表达式给出错误的结果?

问题描述 投票:0回答:1

所以我的数据看起来像这样。含义是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
sql sql-server ssms
1个回答
1
投票

我不确定“ 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个薪酬期的每两周支付一次的员工将不被称为“新员工”。您的数据没有足够的信息来区分这种情况,除非您有日期或其他信息。

© www.soinside.com 2019 - 2024. All rights reserved.