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

DB2中使用ROW_NUMBER() OVER(PARTITION BY)报错:聚合/OLAP函数使用无效

问题原因

DB2 不允许在 WHERE 子句中直接使用窗口函数(比如 ROW_NUMBER() OVER())。这是因为SQL语句的执行顺序是先处理 FROM 和 WHERE 子句,再计算窗口函数。当执行 WHERE 时,窗口函数的结果还未生成,因此会触发 SQL0120N 错误。

解决方案

根据你的需求(获取每个 KUNDE_PART_REF 的唯一行),有两种简洁的处理方式:

方式一:用子查询/CTE 包裹窗口函数

把窗口函数的计算放到子查询或CTE中,再在外层过滤行号:

-- 子查询写法
SELECT KUNDE_PART_REF
FROM (
    SELECT 
        KUNDE_PART_REF,
        ROW_NUMBER() OVER(PARTITION BY KUNDE_PART_REF ORDER BY KUNDE_PART_REF) AS rn
    FROM G00V.G79_KUNDE_KONTAKT_INFO_NL_CBT
) AS sub
WHERE rn = 1;

-- CTE写法(DB2支持)
WITH ranked_data AS (
    SELECT 
        KUNDE_PART_REF,
        ROW_NUMBER() OVER(PARTITION BY KUNDE_PART_REF ORDER BY KUNDE_PART_REF) AS rn
    FROM G00V.G79_KUNDE_KONTAKT_INFO_NL_CBT
)
SELECT KUNDE_PART_REF
FROM ranked_data
WHERE rn = 1;

方式二:用 DISTINCT 简化查询

因为你的分区和排序字段都是 KUNDE_PART_REF,本质上就是要获取该字段的唯一值,用 DISTINCT 更高效:

SELECT DISTINCT KUNDE_PART_REF
FROM G00V.G79_KUNDE_KONTAKT_INFO_NL_CBT;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:39:51