我有一张表,“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”,但我正在使用的数据库引擎不支持它。
需要一些进一步的详细信息,例如数据库名称以及年份是否只有 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 |