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

SQL CASE WHEN查询异常:SUM(CV_Doggo)衍生列无法生成求助

SQL CASE WHEN与窗口函数求和问题修正

问题分析

  • CASE表达式返回字符串类型的'0'/'1',SUM函数无法对字符串进行数值求和,会导致计算异常。
  • 窗口函数OVER (CV_Doggo)语法错误:OVER子句不能直接使用列别名作为分区规则,需明确使用PARTITION BY指定分组逻辑;同时无法引用当前SELECT列表中定义的别名作为分区依据,需重复逻辑或通过子查询/CTE提前计算。
  • 冗余逻辑:WHERE条件已过滤CPTY_RSK_FCTR_MTHDY_TYP为空的行,<=2000和>=2001已覆盖所有非空数值场景,ELSE分支可省略。

修正方案

方案1:直接修正窗口函数逻辑

CASE 
    WHEN CPTY_RSK_FCTR_MTHDY_TYP <= 2000 THEN 0
    ELSE 1
END AS CV_Doggo,
SUM(CASE 
        WHEN CPTY_RSK_FCTR_MTHDY_TYP <= 2000 THEN 0
        ELSE 1
    END) OVER (PARTITION BY CASE 
                                WHEN CPTY_RSK_FCTR_MTHDY_TYP <= 2000 THEN 0
                                ELSE 1
                            END) AS Total_CV_Doggo
FROM 
    ia_r_pty @ffdws1p_m.de.db.com
WHERE 
    CPTY_RSK_FCTR_MTHDY_TYP IS NOT NULL;

方案2:用CTE简化逻辑(更易维护)

WITH CTE_PtyData AS (
    SELECT 
        CASE 
            WHEN CPTY_RSK_FCTR_MTHDY_TYP <= 2000 THEN 0
            ELSE 1
        END AS CV_Doggo
    FROM 
        ia_r_pty @ffdws1p_m.de.db.com
    WHERE 
        CPTY_RSK_FCTR_MTHDY_TYP IS NOT NULL
)
SELECT 
    CV_Doggo,
    SUM(CV_Doggo) OVER (PARTITION BY CV_Doggo) AS Total_CV_Doggo
FROM CTE_PtyData;

额外说明

如果需要计算全局所有行的总和(而非按CV_Doggo分组求和),只需移除PARTITION BY子句,改为SUM(CV_Doggo) OVER ()即可。

内容的提问来源于stack exchange,提问作者SlickDaddyTDog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:00:10