我正在尝试映射此特定的SQL代码以用于数据仓库。
我有两列(TARGET)和(NET_SALARY),目的是在TARGET为700时将NET_SALARY映射为0,在其他情况下,子字符串净工资为1,30
我收到的错误是缺少右括号,如果有人可以清除它,我将很高兴。
P.S这两个列都是varchar2数据类型
CASE
WHEN SRC_CUSTOMER.TARGET = '700' THEN SRC_CUSTOMER.NET_SALARY = '0'
ELSE SUBSTR(SRC_CUSTOMER.NET_SALARY,1,30)
END
答案 0 :(得分:1)
将分配移至case
关键字之前,并将SRC_CUSTOMER.TARGET
作为内部表达式:
SRC_CUSTOMER.NET_SALARY =
CASE SRC_CUSTOMER.TARGET
WHEN '700' THEN '0'
ELSE SUBSTR(SRC_CUSTOMER.NET_SALARY,1,30)
END
可以用decode function重写:
SRC_CUSTOMER.NET_SALARY = decode(SRC_CUSTOMER.TARGET,'700','0',SUBSTR(SRC_CUSTOMER.NET_SALARY,1,30))
答案 1 :(得分:1)
如果这是在ODI映射/接口的上下文中,则只能使用SQL,而不能使用PL / SQL。您不能在第一个THEN中将值分配给SRC_CUSTOMER.NET_SALARY。实际上,您只需要设置所需的值,它将被映射到您的目标属性。
尝试
CASE
WHEN SRC_CUSTOMER.TARGET = '700' THEN '0'
ELSE SUBSTR(SRC_CUSTOMER.NET_SALARY,1,30)
END