postgres中多列转多行
时间: 2024-09-11 09:00:53 浏览: 36
在PostgreSQL中,如果你想要将一个表的多列转换为多行,通常需要使用动态SQL或者CROSS JOIN结合UNION等SQL技术。这里提供一个使用`CROSS JOIN`和`UNION`的方法来实现多列转多行的示例。
假设你有一个名为`sales`的表,其中包含销售数据,表结构如下:
```
CREATE TABLE sales (
year INT,
product_a INT,
product_b INT,
product_c INT
);
```
这个表有三列分别代表不同产品的销售量,现在你想将这个表转换成如下格式:
```
year | product | sales
---------------------
2021 | A | 100
2021 | B | 150
2021 | C | 200
...
```
你可以使用以下SQL查询:
```sql
SELECT year, 'A' AS product, product_a AS sales FROM sales
UNION ALL
SELECT year, 'B', product_b FROM sales
UNION ALL
SELECT year, 'C', product_c FROM sales;
```
如果列非常多,手动写每个`UNION ALL`会非常繁琐,这时可以考虑使用PL/pgSQL编写一个动态SQL语句或者使用其他数据库提供的PIVOT功能,如果数据库支持的话。
请注意,不同的数据库系统可能有不同的语法和功能来处理这种类型的数据转换,上面提供的方法是基于PostgreSQL的一种实现方式。
阅读全文