获取一行上每个ID不同行的数据

问题描述 投票:0回答:1

我的数据如下:

身份证 年份 第1卷 第2卷
AAA 2023 10 20
AAA 2024 5 10
BBB 2023 20 40
BBB 2024 30 60

我希望将每个 ID 的卷全部放在一行上,理想情况下,列名称以年份扩展,并用下划线符号分隔。

我想要拥有的:

身份证 第1卷_2023 第2卷_2023 第 1 卷_2024 年 第2卷_2024
AAA 10 20 5 10
BBB 20 40 30 60

如何在 PostgreSQL 中执行此操作?

postgresql
1个回答
0
投票

首先,启用 tablefunc 扩展(如果尚未启用)。 然后执行此查询,将“your_table_name”替换为您的实际表名称:

SELECT *
FROM crosstab(
    'SELECT ID, 
            CONCAT(''Volume1_'', Year) AS Volume1_Year, 
            Volume1, 
            CONCAT(''Volume2_'', Year) AS Volume2_Year, 
            Volume2
     FROM your_table_name
     ORDER BY ID, Year'
) AS ct(
    ID text, 
    Volume1_2023 int, 
    Volume2_2023 int, 
    Volume1_2024 int, 
    Volume2_2024 int
);
© www.soinside.com 2019 - 2024. All rights reserved.