我的数据如下:
身份证 | 年份 | 第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 中执行此操作?
首先,启用 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
);