You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:52:44