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

基于列值筛选合并数据表,是否属于Pivot操作?

解决方案

这确实属于**Pivot(行转列)**操作,下面给你两种实用的实现方式:

1. 通用CASE WHEN写法(适配绝大多数数据库)

这种写法不依赖数据库特定语法,兼容性拉满:

SELECT 
    m.ID,
    m.data,
    MAX(CASE WHEN a.key = 'apple' THEN a.value END) AS apple,
    MAX(CASE WHEN a.key = 'orange' THEN a.value END) AS orange
FROM 主表 m
LEFT JOIN 附加信息表 a 
    ON m.ID = a.ID 
    AND a.key IN ('apple', 'orange') -- 提前过滤不需要的key,减少计算量
GROUP BY m.ID, m.data;

逻辑拆解:

  • 用LEFT JOIN确保主表所有记录都保留,没有匹配的附加信息自动显示NULL
  • 通过CASE WHEN把key列的取值映射为对应列名,用MAX聚合(因为每个ID+key唯一,MIN也可以)合并行数据
  • 提前过滤pear这类不需要的key,提升查询效率

2. 数据库原生PIVOT语法(以SQL Server为例)

如果你的数据库支持原生PIVOT(比如SQL Server、Oracle、PostgreSQL 11+),可以用更简洁的写法:

SELECT 
    p.ID,
    p.data,
    p.apple,
    p.orange
FROM (
    -- 先筛选出需要的key,避免PIVOT处理冗余数据
    SELECT m.ID, m.data, a.key, a.value
    FROM 主表 m
    LEFT JOIN 附加信息表 a 
        ON m.ID = a.ID 
        AND a.key IN ('apple', 'orange')
) AS source
PIVOT (
    MAX(value) -- 聚合函数,这里用MAX是因为每个ID+key对应唯一值
    FOR key IN ([apple], [orange]) -- 指定要转成列的key值
) AS p;

最终结果:

执行任意一种SQL,都会得到你想要的结果:

IDdataappleorange
1bla53
2blubb4NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:35