我有一些这样的数据:
我的要求是根据用户的额外工作时间获得总工资。
with t as
(select 1 from_hour,4 to_hour,20 pay from dual union all
select 5 from_hour,8 to_hour,50 pay from dual union all
select 10 from_hour,12 to_hour,100 pay from dual)
, input_data
as
(
select 6 user_hours from dual
)
select t.from_hour,t.to_hour,t.pay
from t
join input_data i on 1=1
;
例如:
当用户工作了4个小时,我们支付每小时20美元。总计= 4* 20 = 80$
当用户工作了6个小时,我们支付前4小时20美元,然后为第5和第6小时,我们支付50美元。
当用户工作了9个小时,前4个小时20美元,然后为第5至第8小时,我们支付50美元,为第9小时,我们支付100美元。
任何关于如何实现HOURS_WORKED列计算和上述数据集的指导都将非常有帮助。
谢谢。
3条答案
按热度按时间yduiuuwa1#
这很简单:
DBFiddle:https://dbfiddle.uk/ovlq7ZjO
或者解释一下:
hours_to_pay
-是一个小时数,我们通过比较user_hours和to_hour
得到使用
outer apply
和sum()
来聚合结果uttx8gqw2#
看起来你的“total_pay”列是从“hours_worked”列派生出来的,所以我们:
CASE
表达式计算工作时间输出:
| 开始_小时|至小时|支付|小时数|总计_支付|
| - -----|- -----|- -----|- -----|- -----|
| 一个|4|二十个|4|八十|
| 5个|八|五十|2|一百|
查看演示here。
hfyxw5xn3#
您可以使用相关子查询来查找工资总额:
其中,对于样本数据:
输出:
| 用户小时数|总计_支付|
| - -----|- -----|
| 六|一百八十|
fiddle