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
相关产品推荐
相关产品推荐

