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

PostgreSQL如何实现列转行 宽表转长表的SQL查询语句怎么写

PostgreSQL宽表转长表实现方案

你要实现的是宽表转长表(逆透视/Unpivot),和crosstab的作用完全相反:crosstab是tablefunc扩展提供的行转列(透视/Pivot)函数,用于将多行聚合为多列输出,完全不匹配你的需求,PostgreSQL也没有原生colpivot语法。

以下是两种可直接使用的实现方案:

方案1:UNION ALL实现(全版本兼容)

写法简单通用,所有PostgreSQL版本都支持:

SELECT 
  type,
  'success' AS state,
  success AS count
FROM 你的实际表名
UNION ALL
SELECT
  type,
  'failed' AS state,
  failed AS count
FROM 你的实际表名
ORDER BY type, state DESC;

方案2:LATERAL JOIN实现(PostgreSQL 11+ 推荐)

版本高于等于11的PostgreSQL可使用该写法,性能更优,只需扫描一次原表:

SELECT
  t.type,
  s.state,
  s.count
FROM 你的实际表名 t
CROSS JOIN LATERAL (
  VALUES
    ('success', t.success),
    ('failed', t.failed)
) AS s(state, count)
ORDER BY t.type, s.state DESC;

将上述SQL中的你的实际表名替换为你自己的表名,即可输出符合要求的结果。

内容的提问来源于stack exchange,提问作者SYAHRIL ASIDIQ FIRDAUS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 19:12:00