首页 > 解决方案 > 如何将多个值存储在要在案例语句中使用的变量中

问题描述

我有这个问题,在这方面的任何帮助将不胜感激。我有 Oracle 数据库并处理以下业务案例: 员工可以在他/她的正常时间或加班时间从事不同的工作等级需要计算员工的工作时间和不同的工作等级和工资代码,因为我有时间和工作等级在不同的表中,具有工作等级的表没有小时数,而是超时和超时,因此在查询数据库后,我得到以下结果。

Emp_ID 工资代码 工作等级 小时 日期
1 01 8 2021/06/07
1 02 2 2021/06/07
1 08 8 2021/06/08
1 01 6 2021/06/09
1 01 8 2021/06/09
1 01 8 2021/06/10
1 01 8 2021/06/11
1 02 9 2021/06/11

现在,当员工在不同的工作级别工作时,我会弄错时间。为了克服这个问题,我需要确定员工在不同工作级别工作的日期我可以放置案例陈述。我使用了这个逻辑。选择员工在不同工作级别工作的日期,并在该日期从表 A 计算小时数,否则从表 B 计算小时数。问题是我不能简单地使用变量,因为可能有多个日期。我怎样才能做到这一点?我可以使用任何其他逻辑吗?

谢谢,

这是我的表 表 A

Emp_ID 工资代码 time_in 暂停 作业等级 日期
01 8:00 16:00 2021-06-7
01 16:00 18:00 2021-06-7
01 8:00 16:00 2021-06-08
01 8:00 14:00 2021-06-09
01 14:00 16:00 2021-06-09
01 8:00 16:00 2021-06-10
01 8:00 16:00 2021-06-11
01 16:00 17:00 2021-06-11

该表不存储工资代码。空 job_grade 表示员工在同一工作级别工作

表 B

Emp_ID 工资代码 小时 日期
01 1 8 2021-06-7
01 2 2 2021-06-7
01 8 8 2021-06-08
01 1 8 2021-06-09
01 1 8 2021-06-10
01 1 8 2021-06-11
01 2 2 2021-06-11

此表存储工资代码,但没有工作等级变化,只是一个普通工资代码和每个工资代码的小时数(1 = 正常,2 = 加班,8 = 假期等。)

我的查询

select  
A.emp_id,
A.job_grade,
B.Wage_code,
B.Date,
case 
when A.job_grade ='' then B.Hours
else 
to_char(A.time_in - A.time_out) *(24),'fm99.90') 
end "Hours"

 from A 
left join B on A.emp_id=B.emp_id and A.Date=B.Date

通过这个查询,当员工在不同的工作级别工作时,我会得到错误的时间。因为 case 语句中的条件检查工作等级是否为空,然后从表 B 中计算小时数。现在例如 06/07,员工在正常等级以及不同的工作等级中工作。如何确定员工在不同工作级别工作的日期,以便将其与 case 语句中的 job_grade 条件结合起来并准确计算小时数。

非常感谢您的支持!!

标签: oraclevariables

解决方案


推荐阅读