PostgreSQL如何将单列数据按值拆分填充到对应新列行中
PostgreSQL按条件拆分字段值到新增列的实现方案
直接使用CASE条件表达式逐行判断取值即可实现需求,无需复杂关联或特殊函数。
实现代码
假设源表名为your_source_table,直接查询得到目标格式结果的SQL如下:
SELECT id, Column1, -- 值为A1时填充到Column1.1,否则留空 CASE WHEN Column1 = 'A1' THEN Column1 END AS "Column1.1", -- 值为A2时填充到Column1.2,否则留空 CASE WHEN Column1 = 'A2' THEN Column1 END AS "Column1.2" FROM your_source_table ORDER BY id;
如果需要将结果直接落地为物理存储的目标表,使用CREATE TABLE AS语法即可:
CREATE TABLE target_table AS SELECT id, Column1, CASE WHEN Column1 = 'A1' THEN Column1 END AS "Column1.1", CASE WHEN Column1 = 'A2' THEN Column1 END AS "Column1.2" FROM your_source_table ORDER BY id;
注意事项
- PostgreSQL中
CASE语句如果不写ELSE子句,不满足条件时默认返回NULL,和需求里的「留空」效果一致;如果需要显式返回空字符串,可以补充ELSE ''。 - 新增列名
Column1.1、Column1.2包含英文点号,必须用双引号包裹标识符,否则数据库会将其识别为「表名.字段名」的引用格式抛出语法错误。 - 执行代码后返回的结果和给出的目标表效果完全匹配:A1值仅出现在Column1.1列,A2值仅出现在Column1.2列,不匹配的对应列为空。
内容的提问来源于stack exchange,提问作者sahil
相关产品推荐
相关产品推荐

