postgres sql列转行
时间: 2024-11-04 22:13:46 浏览: 25
PostgreSQL中的列转行操作通常通过`UNION ALL`、`CASE`表达式或者使用数组和`jsonb`数据类型来实现,特别是当需要将单个列的数据分解成多行时。这里有几个例子:
1. 使用`UNION ALL`和`CASE`:
```sql
SELECT id,
CASE WHEN position = 1 THEN 'Value1'
WHEN position = 2 THEN 'Value2'
ELSE NULL
END AS new_column
FROM (
SELECT id, 1 as position
UNION ALL
SELECT id, 2
) subquery
WHERE position IS NOT NULL
```
这会将'id'列的值转换为两行,新列'new_column'分别包含'Value1'和'Value2'。
2. 如果你有一个数组类型的列,可以使用`unnest()`函数:
```sql
SELECT id, value
FROM (
SELECT id, unnest(array['Value1', 'Value2']) AS value
) subquery
```
这将把数组元素'Value1'和'Value2'变为两行。
3. 对于JSONB数据,可以使用`jsonb_array_elements()`:
```sql
SELECT id, data->>'key' AS new_column
FROM your_table
CROSS JOIN jsonb_array_elements(data->'array_field') AS element;
```
这里假设你有一个字段`data`,其中包含一个JSONB数组,然后提取出每个元素的值到新的一列。
阅读全文