首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL Case语句“调整”

MySQL Case语句“调整”
EN

Stack Overflow用户
提问于 2018-07-24 23:09:18
回答 2查看 42关注 0票数 1

我有以下工作查询,它以小时为单位计算员工的应计时间,但我需要将11和14更改为(14 & 18),如果为manager=1

下面是我当前的代码:

代码语言:javascript
复制
CASE 
WHEN TIMESTAMPDIFF(DAY,hiredate,NOW()) < 1
THEN '0'
WHEN TIMESTAMPDIFF(DAY,hiredate,NOW()) >= 1 AND TIMESTAMPDIFF(MONTH, 
hiredate, NOW()) <= 60
THEN '11'
WHEN TIMESTAMPDIFF(MONTH, hiredate, NOW()) >= 61 AND TIMESTAMPDIFF(MONTH, 
hiredate, NOW()) <= 120
THEN '14'
ELSE '18'    
END AS monthly_Accrual_Level

如何添加额外的变量"manager=1“来覆盖以下情况:

当结果= 11,但员工是经理时,使他的时间=14

  • 当结果= 14,但员工是经理,使他的时间= 18
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-24 23:19:32

您可以使用“sub case”:

代码语言:javascript
复制
CASE
...
WHEN TIMESTAMPDIFF(DAY,hiredate,NOW()) >= 1 AND TIMESTAMPDIFF(MONTH, 
hiredate, NOW()) <= 60
THEN CASE WHEN manager = 1 THEN '14' ELSE '11' END
... —- similar for other manager value
END AS monthly_Accrual_Level

或者将条件的每一端添加到WHEN:

代码语言:javascript
复制
CASE
...
WHEN TIMESTAMPDIFF(DAY,hiredate,NOW()) >= 1 AND TIMESTAMPDIFF(MONTH, 
hiredate, NOW()) <= 60
AND manager = 1 THEN '14'
WHEN TIMESTAMPDIFF(DAY,hiredate,NOW()) >= 1 AND TIMESTAMPDIFF(MONTH, 
hiredate, NOW()) <= 60
AND manager != 1 THEN '11'
... —- similar for other manager value
END AS monthly_Accrual_Level

我更喜欢“sub case”,因为它更接近你用英语表达的意图,但请选择你觉得更容易阅读的那个。

票数 2
EN

Stack Overflow用户

发布于 2018-07-25 01:06:31

感谢波西米亚人的大力帮助!

这是我最终得到的解决方案:

代码语言:javascript
复制
CASE
    WHEN TIMESTAMPDIFF( DAY, hiredate, NOW( ) ) < 1 THEN '0' WHEN TIMESTAMPDIFF( DAY, hiredate, NOW( ) ) >= 1 

        AND TIMESTAMPDIFF( MONTH, hiredate, NOW( ) ) <= 60 AND manager != 1 THEN '11' WHEN TIMESTAMPDIFF( DAY, hiredate, NOW( ) ) >= 1 
        AND TIMESTAMPDIFF( MONTH, hiredate, NOW( ) ) <= 60 AND manager = 1 THEN '14' WHEN TIMESTAMPDIFF( DAY, hiredate, NOW( ) ) >= 1 

        AND TIMESTAMPDIFF( MONTH, hiredate, NOW( ) ) <= 120 AND manager != 1 THEN '14' WHEN TIMESTAMPDIFF( DAY, hiredate, NOW( ) ) >= 1 
        AND TIMESTAMPDIFF( MONTH, hiredate, NOW( ) ) <= 120 AND manager = 1 THEN '18' 
    ELSE '18' 
END AS monthly_Accrual_Level
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51502054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档