Oracle转BigQuery:含Decode的查询语句等效写法求助
Oracle查询转BigQuery:DECODE函数的替换方案
原Oracle查询语句
select e.name,d.dept from employee e inner join department d on e.eid = d.eid and decode(e.unit,null,1,0,1,1,1,2,2)=decode(d.unit,null,1,0,1,1,1,2,2)
转换后的BigQuery等效语句
由于BigQuery不支持Oracle的DECODE函数,这里用CASE表达式实现完全等价的逻辑:
select e.name,d.dept from employee e inner join department d on e.eid = d.eid and CASE WHEN e.unit IS NULL OR e.unit IN (0,1) THEN 1 WHEN e.unit = 2 THEN 2 END = CASE WHEN d.unit IS NULL OR d.unit IN (0,1) THEN 1 WHEN d.unit = 2 THEN 2 END
逻辑说明
原Oracle语句中DECODE(e.unit,null,1,0,1,1,1,2,2)的逻辑是:
- 当
e.unit为NULL、0或1时,返回1 - 当
e.unit为2时,返回2
通过CASE表达式可以完全复现这一判断逻辑,保证两张表的关联条件与原Oracle查询一致。
内容的提问来源于stack exchange,提问作者Sandeep Mohanty
相关产品推荐
相关产品推荐

