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

如何在PostgreSQL中转置部分数据字段?max(case)尝试失败

解决方案

可以通过分组聚合+关联查询实现需求:先提取每个id对应的区域信息(state、district、block),再将其与指标记录关联,最终得到目标格式。

对应的SQL语句如下:

SELECT 
    t.id,
    agg.state,
    agg.district,
    agg.block,
    t.indicator,
    t.value
FROM mytable t
JOIN (
    SELECT 
        id,
        MAX(CASE WHEN indicator = 'state' THEN value END) AS state,
        MAX(CASE WHEN indicator = 'district' THEN value END) AS district,
        MAX(CASE WHEN indicator = 'block' THEN value END) AS block
    FROM mytable
    GROUP BY id
) agg ON t.id = agg.id
WHERE t.indicator LIKE 'indicator%';

逻辑说明:

  1. 子查询agg:按id分组,用MAX(CASE)将每个id对应的state、district、block值从行转换为列,得到每个id的区域信息单行记录。
  2. 外层查询:关联原表mytable和子查询结果,通过WHERE筛选出所有指标类(indicator以indicator开头)的记录,将区域信息与每条指标记录拼接,输出目标结构。

执行该语句后,即可得到你期望的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:42:27