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

PostgreSQL将多列分类数据合并为带分类标识单列的实现方法

PostgreSQL宽表转长表实现方案

你需要完成的是**列转行(宽表转长表)**操作,在PostgreSQL中可以通过以下两种方案实现:

方案1:使用UNION ALL拼接(兼容性最佳)

该方案逻辑直观,兼容绝大多数SQL数据库,适合分类列较少的场景:

SELECT id, First AS data, 'First' AS category
FROM your_table
WHERE First IS NOT NULL
UNION ALL
SELECT id, Second AS data, 'Second' AS category
FROM your_table
WHERE Second IS NOT NULL
UNION ALL
SELECT id, Third AS data, 'Third' AS category
FROM your_table
WHERE Third IS NOT NULL
ORDER BY id;

方案2:使用unnest函数(PostgreSQL特有,写法简洁)

该方案利用PostgreSQL原生的数组展开函数,代码更精简,适合分类列较多的场景:

SELECT 
  id,
  unnest(ARRAY[First, Second, Third]) AS data,
  unnest(ARRAY['First', 'Second', 'Third']) AS category
FROM your_table
WHERE COALESCE(First, Second, Third) IS NOT NULL
ORDER BY id;

注:上述代码中的your_table请替换为你实际的表名。由于你的原表每行仅存在一个非空分类字段,两种方案执行后都不会产生冗余数据,输出结果完全匹配需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:27:03