首页 > 解决方案 > 如何将数据相乘以获得价值 | 甲骨文 |

问题描述

我有 2表表 1:员工表 2:部门

以下是我使用的连接条件

select e.empsal,d.rate from employee e left join on department d where  e.empid = d.depid

基于应该得到多个d.rate的值e.empsal,直到加入条件我能够在没有得到添加案例的位置之后执行,如果你看到drate如果它们是 25 个 drate 值,那么值将是任何东西,例如:1 2 4 6 7 9 14 36 67 8 2 4 19 11 8 写那么多是不可行的如果条件的话

case drate 
if 0 then e.empsal*1
if 1 then e.empsal*10
if 2 then e.empsal*100
if 4 then e.empsal*1000
if 6 then e.empsal*1000000
...

示例:以下是逻辑及其预期输出:

if d.rate value is 0 then  new_empsal=e.empsal * 1
if d.rate value is 1 then  new_empsal=e.empsal * 10
if d.rate value is 2 then  new_empsal=e.empsal * 100
if d.rate value is 3 then  new_empsal=e.empsal * 1000
will go on ...

所以新的值 e.empsal 应该低于

EMPSAL,DRATE,NEW_EMPSAL
1200,0,1200
2345,1,23450
1678,3,1678000
2219,6,2219000000
2458,1,24580
2697,2,269700
2936,1,29360
3175,4,31750000
3414,7,34140000000
3653,2,365300
3892,1,38920
4131,1,41310
4566,0,4566
4131,4,41310000
1000,6,1000000000
345,1,3450
2345,5,234500000
1123,0,1123
990,3,990000
1100,3,1100000
345,7,3450000000
2345,2,234500

如何使用上述条件实现以下输出?

标签: sqloracle

解决方案


你在寻找case表达吗?

select e.*,
       (case d.rate
           when 0 then 1 when 1 then 10 when 2 then 100 when 3 then 1000 when 4 then 10000 when 6 then 1000000
        end) * e.empsal
from employee e left join
     department d
     on e.depid = d.depid;

请注意,这使用where而不是修复了您的语法on。我也改变了join条件,因为匹配empiddepid我来说没有多大意义。

或更简洁地使用power()

select e.*, power(10, d.rate) * e.empsal
from employee e left join
     department d
     on e.dep = d.depid;

推荐阅读