首页 > 解决方案 > SQL - 基于过滤器聚合列

问题描述

我的数据有一个 ID、日期和 points_earned 字段。每行代表该 ID 在该日期获得的积分。

我想创建类似的东西:

身份证| Points_Earned_January | Points_Earned_February | Points_Earned_March

结果应该是GROUP BYID。Points_Earned_January 应该给出SUM该 ID 在一月份的所有 points_earned。

我怎样才能做到这一点?

标签: sqlsql-serverselectsum

解决方案


您可以使用条件聚合:

select id,
       (case when date >= '2020-02-01' and date < '2020-03-01' then points else 0 end) as points_feb,
       (case when date >= '2020-03-01' and date < '2020-04-01' then points else 0 end) as points_mar
from t
group by id;

推荐阅读