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

Oracle SQL如何按相同ID提取不同行对应列值生成聚合结果

Oracle SQL 实现需求的具体写法

你需要的是按ID分组后,分别提取不同product_id对应的指定字段值,以下两种写法都可以直接运行得到目标结果:


写法1:CASE WHEN + 聚合(全版本兼容)

这种写法不需要依赖高版本Oracle特性,适配所有环境:

SELECT
    ID,
    MAX(CASE WHEN product_id = 10 THEN product_value10 END) AS Product_value10,
    MAX(CASE WHEN product_id = 20 THEN product_value20 END) AS Product_value20,
    MAX(CASE WHEN product_id = 30 THEN product_value30 END) AS Product_value30
FROM Product
GROUP BY ID
ORDER BY ID;

逻辑说明:用CASE语句只保留对应product_id行的目标字段值,其余行返回null,再通过MAX聚合过滤掉null值,最终每个ID得到一行汇总结果。


写法2:PIVOT行转列(Oracle 11g及以上版本支持)

如果你用的是11g及更高版本的Oracle,可以用行转列语法更直观实现:

SELECT * FROM (
    SELECT
        ID,
        product_id,
        -- 先提取每行对应要保留的目标值
        CASE product_id
            WHEN 10 THEN product_value10
            WHEN 20 THEN product_value20
            WHEN 30 THEN product_value30
        END AS val
    FROM Product
)
PIVOT (
    MAX(val)
    FOR product_id IN (
        10 AS Product_value10,
        20 AS Product_value20,
        30 AS Product_value30
    )
)
ORDER BY ID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:15:04