CASE运算符类型不匹配报错排查与SQL逻辑修正请求
解决BigQuery CASE语句类型不兼容报错问题
报错原因
你遇到的报错核心是CASE语句要求所有分支返回可兼容的统一数据类型:当前部分分支返回STRING类型(比如T2.CD、T3.VAL),而满足条件时返回的['F','M']是ARRAY<STRING>类型,两种类型无法自动转换,导致报错。
修正后的SQL语句
根据需求,我们需要把所有分支的返回值统一为ARRAY<STRING>类型,将原本的字符串值包装成单元素数组即可:
SELECT CASE WHEN T2.val IS NOT NULL THEN [T2.CD] ELSE CASE WHEN T3.VAL <> '~' OR T3.VAL = 'FM' THEN ['F','M'] ELSE [T3.VAL] END END AS FVAL FROM (SELECT * FROM TABLE3) T3 LEFT JOIN (SELECT * FROM TABLE2) T2 ON T2.VAL = T3.VAL;
说明
- 把
T2.CD改为[T2.CD],将单个字符串转为单元素数组 - 把
ELSE T3.VAL改为ELSE [T3.VAL],同样将单个字符串转为单元素数组 - 现在所有CASE分支的返回类型都是
ARRAY<STRING>,类型统一后即可正常执行
内容的提问来源于stack exchange,提问作者user23424529
相关产品推荐
相关产品推荐

