mysql - MySQL Case 语句“调整”
问题描述
我有以下工作查询,以小时为单位计算员工应计时间,但我需要将 11 & 14 更改为 (14 & 18) IF manager=1
这是我当前的代码:
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
解决方案
您可以使用“子案例”:
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:
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
我更喜欢“子案例”,因为它更能准确地捕捉到你用英语表达的意图,但选择你觉得更容易阅读的那个。
推荐阅读
- swiftui - 在测试的拆解阶段我无法删除我的应用程序
- javascript - 创建一个可以添加、触发和取消订阅事件的事件触发类
- error-handling - 使用带有易错映射函数的 filter_map 时如何聚合错误的迭代器?
- http - 并发请求时 HTTP 请求超时
- svn - 使用 TortoiseSVN 将文件从一个目录粘贴到签出目录给出“错误:文件已存在”
- amazon-web-services - Terraform AWS 存储桶策略文档,ARN 已更改
- jquery - 为什么 Jquery Ui 在 iphone 的 safari 上不起作用?
- css - /deep/ 概念多页效果相同的 scss 。但我不希望角度中的一页效果
- python - Python 请求很慢并且需要很长时间才能完成 HTTP 或 HTTPS 请求
- sql-server - 多个 sql 作业成功时发送电子邮件通知