sql - 如何将数据相乘以获得价值 | 甲骨文 |
问题描述
我有 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
如何使用上述条件实现以下输出?
解决方案
你在寻找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
条件,因为匹配empid
对depid
我来说没有多大意义。
或更简洁地使用power()
:
select e.*, power(10, d.rate) * e.empsal
from employee e left join
department d
on e.dep = d.depid;
推荐阅读
- asp.net - 如何解决 system.runtime.interopservices.com 异常错误
- javascript - 是否可以通过 console.group 过滤浏览器 console.log 输出?
- css - 溢出:隐藏在 div 下的滚动
- python - 用python删除字符串中的字符
- sql - 多个表上的 SQL 复合索引
- laravel - Laravel Dusk 可以断言 JavaScript 动态元素吗?
- html - 根据用户名的最后一个字母更改文本
- javascript - Branch.io 不能使用带有长链接的自定义 fallback_url
- go - 具有自定义消息编码器的 Uber zap 日志记录
- c# - 对在 ASP.NET Webforms 中访问 Outlook 日历 API 的过程感到困惑