假设我在 postgres 表中有几行数据,例如:
身份证 | 价值 |
---|---|
1 | 用户_1 |
2 | 区域_3 |
3 | 用户_2 |
我想以使用
Value
字符之前的 _
部分来确定要填充哪一列的方式来选择值,这样结果将是:
身份证 | 用户 | 地区 |
---|---|---|
1 | 1 | 空 |
2 | 空 | 3 |
3 | 2 | 空 |
有没有办法在 SQL 中做到这一点?
我可以看到可以使用不同的值填充单元格,例如这个答案,但我无法找到有关根据行的内容填充列的任何详细信息。
我已经能够使用
left
: 获取值的相关部分
SELECT
left("Value", strpos("Value", '_') - 1) as "Type"
但我不知道如何使用它来确定列。
使用 case 语句。
这是小提琴https://www.db-fiddle.com/f/nTapovF5r5b8U4Tmjhy4tU/0
select id, user,
case split_part(value, '_', 1)
when 'User' then split_part(value, '_', 2)
end as User,
case split_part(value, '_', 1)
when 'Region' then split_part(value, '_', 2)
end as Region
from tableone;