pgsql中列转行
时间: 2023-06-21 22:07:37 浏览: 124
在 PostgreSQL 中,可以使用 crosstab 函数来执行列转行操作。crosstab 函数是由模块 "tablefunc" 提供的一个扩展函数,因此,在使用 crosstab 函数之前,需要先安装 "tablefunc" 模块。
下面是一个使用 crosstab 函数进行列转行操作的示例:
假设有以下名为 "sales" 的表:
| month | product | sales |
|-------|---------|-------|
| Jan | A | 100 |
| Jan | B | 200 |
| Feb | A | 150 |
| Feb | B | 250 |
现在需要将该表按月份进行行转列操作,得到以下结果:
| month | A | B |
|-------|------|------|
| Jan | 100 | 200 |
| Feb | 150 | 250 |
可以使用以下 SQL 语句实现:
```
SELECT *
FROM crosstab(
'SELECT month, product, sales
FROM sales
ORDER BY 1,2',
'SELECT DISTINCT product
FROM sales
ORDER BY 1'
) AS ct(month text, "A" numeric, "B" numeric);
```
其中,第一个参数为原始数据的查询语句,第二个参数为列名的查询语句。在该示例中,原始数据的查询语句返回了按月份、产品和销售额排序的数据集,列名的查询语句返回了唯一的产品列表。
返回的结果集由 crosstab 函数生成,并使用 AS 子句指定了结果集的列名。
阅读全文