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

Oracle 21c 供应商数据行转置(Pivot)实现求助

Oracle 21c 实现供应商数据的行转置需求

正确实现方案

方法1:条件聚合

SELECT
    MAX(CASE WHEN vendor = 'United co' THEN category END) AS "United co",
    MAX(CASE WHEN vendor = 'ali dist co' THEN category END) AS "ali dist co",
    MAX(CASE WHEN vendor = 'marian srl' THEN category END) AS "marian srl"
FROM (
    SELECT
        vendor,
        category,
        -- 为每个供应商的品类生成排序后的行号
        ROW_NUMBER() OVER (PARTITION BY vendor ORDER BY category) AS rn
    FROM prob
) t
-- 按行号分组,每个行号对应输出一行
GROUP BY rn
ORDER BY rn;

方法2:PIVOT 语法

SELECT "United co", "ali dist co", "marian srl"
FROM (
    SELECT
        vendor,
        category,
        ROW_NUMBER() OVER (PARTITION BY vendor ORDER BY category) AS rn
    FROM prob
)
PIVOT (
    -- 每个行号下取对应供应商的品类(max不影响,因每个rn在供应商下唯一)
    MAX(category)
    -- 指定转置为列的供应商名称
    FOR vendor IN (
        'United co' AS "United co",
        'ali dist co' AS "ali dist co",
        'marian srl' AS "marian srl"
    )
)
ORDER BY rn;

原尝试问题分析

  • LISTAGG 方法:将每个供应商的所有品类合并为单个字符串,无法实现多行展示需求;
  • 第二个 CASE WHEN 方法:错误使用GROUP BY vendor, rn,导致按供应商+行号分组,输出结构与期望不符,应改为仅按rn分组;
  • 第三个 PIVOT 方法:转置对象错误(用seqnum作为列而非vendor),逻辑完全偏离需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:07:04