SQL 查询根据行的聚合将行更改为列

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

我有一张表,“MyTable”如下:

工具 团队 公制 约会
工具1 团队1 25 1/1/2023
工具1 团队1 10 2/1/2022
工具2 团队2 20 1/2/2022

我想按年(不同的年份作为列)定期聚合“度量”,并让 sql 查询返回类似这样的内容,其中“年”列的值将是“度量”的总和

工具 团队 2023 2022
工具1 团队1 25 10
工具2 团队2 0 20

任何人都可以帮我这样的查询吗?对于这些情况,我需要首先从表中推断出不同的年份,然后使用它。而这个不同年份的列表需要来自一个时间范围。对于此示例,我们可以将时间范围表示为:

WHERE date between ago(600d) and now()
。我将从应用程序中收到的 600 值,这就是年份不固定的原因。

我尝试过使用“pivot”,但我正在使用的数据库引擎不支持它。

sql amazon-timestream
1个回答
0
投票

需要一些进一步的详细信息,例如数据库名称以及年份是否只有 2022 年和 2023 年。如果年数不固定,则

pivot
将是选项,根据数据库引擎可能会有所不同。

对于固定年数和 sql server 解决方案将是:

CREATE TABLE MyTable (
    tool VARCHAR(50),
    team VARCHAR(50),
    metric INT,
    date DATE
);

INSERT INTO MyTable (tool, team, metric, date)
VALUES ('tool1', 'team1', 25, '2023-01-01'),
       ('tool1', 'team1', 10, '2022-02-01'),
       ('tool2', 'team2', 20, '2022-01-02');

查询:

select tool,team,sum(case when year(date)=2023 then metric else 0 end)'2023',
       sum(case when year(date)=2022 then metric else 0 end)'2022'
from MyTable
group by tool,team

输出:

工具 团队 2023 2022
工具1 团队1 25 10
工具2 团队2 0 20

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.