执行以下查询时,我收到问题标题中指示的错误:
ToDoItem
任何人都可以告诉我为什么上述查询失败
select mantas_stg.NY_EGIFTS_TRANS_STG.*,
CASE WHEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_CURR != 'USD' THEN
CASE WHEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_CURR != 'USD' AND MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_LOCAL_CURR != 'USD' THEN
MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT = MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT * 100
END
END
from mantas_stg.NY_EGIFTS_TRANS_STG;
答案 0 :(得分:0)
嵌套case
中的以下行可能是问题所在:
THEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT = MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT * 100
您尝试在MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT
语句中为select
分配一个不允许的值
如果您的目标是更新特定记录的该列中的值,则应使用update
语句。
答案 1 :(得分:0)
一个人不会在case
表达式中指定值。我想你想要这样的东西:
select s.*,
(CASE WHEN s.FUNDS_ORIG_CURR <> 'USD' AND s.FUNDS_LOCAL_CURR <> 'USD'
THEN s.FUNDS_ORIG_AMT * 100
ELSE s.FUNDS_ORIG_AMT
END) as new_funds_orig_amt
from mantas_stg.NY_EGIFTS_TRANS_STG s;
缩进和表别名确保查询更容易阅读。