pgsql 行转列语法
时间: 2023-08-24 20:09:43 浏览: 71
在 PostgreSQL 中实现行转列可以使用 crosstab 函数。crosstab 函数是一个扩展的函数,需要安装 "tablefunc" 模块才能使用。以下是一个简单的例子:
假设我们有一个名为 "sales" 的表,其中包含每个月的销售记录,如下所示:
| id | month | sales |
|----|-------|-------|
| 1 | Jan | 100 |
| 1 | Feb | 200 |
| 1 | Mar | 150 |
| 2 | Jan | 50 |
| 2 | Feb | 75 |
| 2 | Mar | 100 |
我们可以使用以下语句将这些记录转换为行:
```
SELECT *
FROM crosstab(
'SELECT id, month, sales
FROM sales
ORDER BY 1,2',
'SELECT DISTINCT month
FROM sales
ORDER BY 1'
) AS ct(id int, jan int, feb int, mar int);
```
这将返回以下结果:
| id | jan | feb | mar |
|----|-----|-----|-----|
| 1 | 100 | 200 | 150 |
| 2 | 50 | 75 | 100 |
在这个例子中,我们首先使用一个简单的 SELECT 语句来获取原始数据,然后使用 crosstab 函数将月份转换为列。crosstab 函数的第一个参数是原始查询,第二个参数是定义结果表的列的查询。在这个例子中,我们使用 DISTINCT 关键字获取唯一的月份列表,然后将其按顺序排序。
最后,我们使用 AS 子句指定结果表的列名。在这个例子中,我们使用 id 作为行标识符,并将每个月份的销售额作为列。