postgre中行转列
时间: 2023-08-19 12:03:50 浏览: 48
在 PostgreSQL 中,你可以使用 crosstab 函数将行转换为列。但是,在使用 crosstab 函数之前,你需要创建一个扩展,它允许你执行交叉制表操作。
以下是一个示例,演示如何使用 crosstab 函数将行转换为列:
首先,你需要安装 tablefunc 扩展,它提供了 crosstab 函数。
```
CREATE EXTENSION IF NOT EXISTS tablefunc;
```
接下来,假设你有一个包含以下数据的表格:
```
CREATE TABLE sales (
state text,
month text,
amount integer
);
INSERT INTO sales VALUES
('CA', 'Jan', 100),
('CA', 'Feb', 200),
('CA', 'Mar', 300),
('NY', 'Jan', 400),
('NY', 'Feb', 500),
('NY', 'Mar', 600);
```
现在,你可以使用 crosstab 函数将行转换为列:
```
SELECT *
FROM crosstab(
'SELECT state, month, amount FROM sales ORDER BY 1,2',
'SELECT DISTINCT month FROM sales ORDER BY 1'
) AS ct(state text, "Jan" integer, "Feb" integer, "Mar" integer);
```
以上查询将生成以下结果:
```
state | Jan | Feb | Mar
------+-----+-----+-----
CA | 100 | 200 | 300
NY | 400 | 500 | 600
```
在这个例子中,第一个参数为原始查询,它将返回三列数据:state、month 和 amount。第二个参数为列名查询,它将返回所有唯一的月份列表。最后,你需要为结果集中的每个列命名。