我正在运行Impala查询,并试图在语句中使用case:
SELECT *,
CASE WHEN typ_prtctn = 2 then 0.5*PRTCTN_ALLCTD_VL -- life insurance policies pledged
WHEN typ_prtctn = 18 then 2*PRTCTN_ALLCTD_VL -- equity and investment funds shares
ELSE PRTCTN_ALLCTD_VL END as PROTECTION_VALUE
FROM database.tablename
它在抱怨
AnalysisException: Incompatible return types 'DECIMAL(38,9)' and 'DECIMAL(38,10)' of exprs '0.5 * PRTCTN_ALLCTD_VL' and 'PRTCTN_ALLCTD_VL'.
不过,这样做很好:
SELECT *,
0.5*PRTCTN_ALLCTD_VL as test
FROM database.tablename
如错误消息所示,PRTCTN_ALLCTD_VL
为decimal(38,10)
类型。如有任何建议,请见谅。
发布于 2021-02-15 11:57:42
尝试将大小写强制转换为十进制。
SELECT *,
CAST(CASE WHEN typ_prtctn = 2 then 0.5*PRTCTN_ALLCTD_VL -- life insurance policies pledged
WHEN typ_prtctn = 18 then 2*PRTCTN_ALLCTD_VL -- equity and investment funds shares
ELSE PRTCTN_ALLCTD_VL END as DECIMAL(10,4) ) AS PROTECTION_VALUE
或者尝试将相同的数据类型应用于强制浮动的所有计算(1.0、2.0而不是2*和相同的值)
CASE WHEN typ_prtctn = 2 then 0.5*PRTCTN_ALLCTD_VL -- life insurance policies pledged
WHEN typ_prtctn = 18 then 2.0*PRTCTN_ALLCTD_VL -- equity and investment funds shares
ELSE 1.0*PRTCTN_ALLCTD_VL END as PROTECTION_VALUE
https://stackoverflow.com/questions/66207425
复制相似问题