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

如何使用PostgreSQL将宽格式数据重塑为长格式?

PostgreSQL 宽表转长格式解决方案

假设你的源表名为original_table,可以通过**横向展开(Unpivot)**结合字符串拆分实现需求,以下是两种可行的SQL写法:

方法一:使用LATERAL VALUES(推荐,可读性强)

SELECT
  split_part(col_name, '_', 1) AS upper_case,
  split_part(col_name, '_', 2) AS lower_case,
  col_value AS value
FROM
  original_table,
  LATERAL (
    VALUES
      ('A_a', A_a),
      ('B_a', B_a),
      ('A_b', A_b),
      ('B_b', B_b)
  ) AS unpivoted(col_name, col_value);

原理说明:

  • LATERAL VALUES 将源表的每一行数据,转换为包含4行的键值对集合(列名+对应值)
  • split_part(col_name, '_', 1) 拆分列名的第一部分(A/B),作为upper_case字段
  • split_part(col_name, '_', 2) 拆分列名的第二部分(a/b),作为lower_case字段

方法二:使用UNNEST数组展开

SELECT
  unnest(array['A', 'B', 'A', 'B']) AS upper_case,
  unnest(array['a', 'a', 'b', 'b']) AS lower_case,
  unnest(array[A_a, B_a, A_b, B_b]) AS value
FROM original_table;

原理说明:

  • 构造三个对应数组,分别存储upper_case、lower_case的固定值,以及源表的列值
  • UNNEST 同时展开三个数组,实现行的映射

替换代码中的original_table为你的实际表名即可执行,两种方法都能得到你需要的长格式结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:12:45