SQL多列CASE语句编写报错求助:创建actual临时视图失败
解决SQL视图创建中的ParseException错误
首先得明确你的问题根源:你试图在单个CASE表达式里同时定义两个列,这完全不符合SQL的语法规则——CASE表达式只能返回单个值,对应单个列,不能用and同时输出两个列的赋值逻辑。这就是解析器报错mismatched input 'Code'的核心原因,它根本无法理解你这种写法。
修正后的SQL代码
正确的思路是为invoice_sales和no_of_customer分别编写独立的CASE表达式,每个列单独处理对应的逻辑:
CREATE OR REPLACE TEMPORARY VIEW actual AS SELECT -- 单独处理invoice_sales列的赋值逻辑 CASE WHEN Code IN ('16','26','54') THEN actual WHEN Code IN ('3','7') THEN 0 END AS invoice_sales, -- 单独处理no_of_customer列的赋值逻辑 CASE WHEN Code IN ('16','26','54') THEN 0 WHEN Code IN ('3','7') THEN actual END AS no_of_customer, 'USD' AS currency, 'MSMDS_FINANCIALS' AS source_orig, name FROM financials;
额外注意事项
- 原数据中
CODE=16对应的ACTUAL值是0321,如果你的数据库将ACTUAL识别为数值类型,0321会自动转为321;如果需要保留前导零,要确保ACTUAL列是字符串类型,或者在CASE表达式里显式转换,比如CAST(actual AS STRING)。 - 上述代码假设所有
CODE值都在('16','26','54','3','7')范围内,如果存在其他未覆盖的CODE值,CASE会返回NULL,你可以根据需求添加ELSE分支来处理这种情况。
内容的提问来源于stack exchange,提问作者Roho
相关产品推荐
相关产品推荐

