postgresql 行转列的例子

postgresql 行转列的例子

首先要启用tablefunc 扩展。
用管理员账户执行下面的指令。

CREATE EXTENSION tablefunc;

在 PostgreSQL 中,你可以使用 crosstab 函数将列转换为行。crosstab 函数是在 tablefunc 扩展中提供的,因此在使用之前,你需要确保已经安装并启用了该扩展。

下面是一个示例,假设你有一个名为 sales 的表,其中包含了销售数据:

CREATE TABLE sales (product_id INT,month INT,amount NUMERIC
);INSERT INTO sales (product_id, month, amount)
VALUES(1, 1, 100),(1, 2, 150),(1, 3, 200),(2, 1, 50),(2, 2, 75),(2, 3, 100);

现在,你想要将这些数据按照产品 ID 进行列转行,使得每个产品的销售额在不同的月份中成为一行。你可以使用以下查询来实现:

SELECT *
FROM crosstab('SELECT product_id, month, amountFROM salesORDER BY 1, 2','VALUES (1), (2), (3)'
) AS sales_pivot (product_id INT, month_1 NUMERIC, month_2 NUMERIC, month_3 NUMERIC);

这个查询中,我们首先指定了原始查询,它返回了 product_id、month 和 amount 列。然后,我们指定了一个包含所有可能 product_id 值的值列表,这里是 (1), (2), (3)。最后,我们使用 crosstab 函数将原始查询的结果进行转换,并指定了转换后的列名。

运行上述查询,你将会得到以下结果:

 product_id | month_1 | month_2 | month_3
------------+---------+---------+---------1 |     100 |     150 |     2002 |      50 |      75 |     100

这样,你就将原始的列转换为了行,每个产品的销售额在不同的月份中成为了一行。

更多案例请参考:
https://blog.csdn.net/qq_31156277/article/details/90598311