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

Oracle SQL行转列操作PIVOT聚合仅返回单行问题咨询

Oracle SQL行转列实现方案

问题排查

你的现有代码存在两个核心错误导致输出不符合预期:

  • 子查询未包含分组维度字段LVL:PIVOT 语法会默认按子查询中除聚合字段、转列字段之外的所有返回字段分组,你未放入LVL且保留了BATCH_ID、CONTACT_ID,如果这两个字段和LVL不是一一对应关系,会直接导致分组逻辑错误
  • 转列匹配值与实际值不匹配:你在FOR TABLE_SRC IN条件中写的匹配值是'1BASE'、'1INT',和样本数据里TABLE_SRC的实际值BASE、INT不匹配,导致聚合函数取不到对应值

正确实现代码

SELECT *
FROM (
    SELECT 
        LVL, -- 必须保留分组维度字段
        COL_VALUE,
        TABLE_SRC
        -- 若确认BATCH_ID、CONTACT_ID与LVL一一对应,可取消注释保留以下字段
        -- ,BATCH_ID
        -- ,CONTACT_ID
    FROM MISMATCH
)
PIVOT (
    MAX(COL_VALUE)
    FOR TABLE_SRC IN (
        'BASE' AS BASE,
        'INT' AS INT
    )
)
ORDER BY LVL;

输出说明

执行以上代码后会返回两行结果,和你的预期完全匹配:

LVLBASEINT
16BASE: ADDRESS_LINE_2:XINT: ADDRESS_LINE_2:NULL
17BASE: ADDRESS_LINE_3:XINT: ADDRESS_LINE_3:NULL

如果你的业务需要保留BATCH_ID、CONTACT_ID,且同一LVL下这两个字段存在多个不同值,需要根据业务规则选择合适的聚合方式(如取最大值、取首个值等)调整查询逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:04