pgsql将查询出来的数据行列互换
时间: 2024-09-11 08:14:31 浏览: 48
在PostgreSQL数据库中,行列互换通常通过使用PIVOT和UNPIVOT操作来实现。实际上,PostgreSQL没有内置PIVOT函数,但可以通过组合使用CASE语句和聚合函数来模拟PIVOT的效果。以下是一个简单的例子,介绍如何将查询结果的列转换为行:
假设我们有一个销售数据表,表结构如下:
```
CREATE TABLE sales (
year INT,
product VARCHAR(50),
amount INT
);
```
表中数据如下:
```
year | product | amount
------+---------+--------
2020 | 产品A | 100
2020 | 产品B | 200
2021 | 产品A | 150
2021 | 产品B | 250
```
如果我们想要将产品作为列展示,而年份作为行展示,可以使用以下SQL语句:
```sql
SELECT
year,
MAX(CASE WHEN product = '产品A' THEN amount ELSE NULL END) AS 产品A,
MAX(CASE WHEN product = '产品B' THEN amount ELSE NULL END) AS 产品B
FROM sales
GROUP BY year;
```
这将生成如下结果:
```
year | 产品A | 产品B
------+-------+-------
2020 | 100 | 200
2021 | 150 | 250
```
在这个例子中,我们通过聚合函数`MAX`和`CASE`语句创建了两个新的列,分别对应于两个不同的产品,然后按年份分组。
阅读全文