SQL使用group by获取SUM,但有条件地对两列之一的内容求和
Posted
技术标签:
【中文标题】SQL使用group by获取SUM,但有条件地对两列之一的内容求和【英文标题】:SQL Get SUM using group by, but sum contents of one of two columns conditionally 【发布时间】:2021-11-15 10:36:45 【问题描述】:使用 SQL Server,我需要汇总表中的记录并获得一个总和值。我的问题是我需要根据第三列中的条件对每条记录中两列之一的值求和。
示例:这是一个表格:
Station Location Contact ColToSum AltColToSum ColToUse
Station 1 West Smith 4 10 1
Station 1 West Smith 0 10 2
Station 1 West Smith 2 10 1
Station 1 West Smith 7 10 1
Station 2 North Jones 5 10 1
Station 2 North Jones 0 10 2
Station 2 North Jones 0 10 2
Station 3 South Brown 5 10 1
Station 3 South Brown 0 10 2
Station 3 South Brown 0 10 2
Station 3 South Brown 1 10 1
最右边的列包含需要添加到总和的列,ColToSum 或 AltColToSum。如果 ColToUse = 1,则将 ColToSum 值添加到总和中;如果 ColToUse = 2,则将 AltColToSum 添加到 sum。将数据分组以获得摘要,如下所示:
Station 1 West Smith 23
Station 2 North Jones 25
Station 3 South Brown 26
我一直在使用 CASE 语句和 GROUP BY 子句,但似乎无法得到我想要的结果。我也尝试过使用 PARTITION,但我还不是很熟练。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:只使用条件聚合:
select station, location, contact,
sum(case when coltouse = 1 then coltosum
when coltouse = 2 then altcoltosum
end) as sum
from t
group by station, location, contact;
【讨论】:
哎呀,我没有意识到我可以在聚合函数中放置一个案例。这是一个非常简单的解决方案。非常感谢。以上是关于SQL使用group by获取SUM,但有条件地对两列之一的内容求和的主要内容,如果未能解决你的问题,请参考以下文章