SQL 使用 group by 获取 SUM,但有条件地对两列之一的内容求和
SQL Get SUM using group by, but sum contents of one of two columns conditionally
使用SQL服务器,我需要汇总table中的记录并得到一个总和值。我的问题是我需要根据第三列中的条件对每条记录中两列之一的值求和。
示例:这是一个 table:
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 添加到总和中。将数据分组以获得摘要,如下所示:
Station 1 West Smith 23
Station 2 North Jones 25
Station 3 South Brown 26
我一直在使用 CASE 语句和 GROUP BY 子句,但似乎得不到我想要的结果。我也尝试过使用 PARTITION,但我还不是很熟练。任何帮助将不胜感激。
只使用条件聚合:
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服务器,我需要汇总table中的记录并得到一个总和值。我的问题是我需要根据第三列中的条件对每条记录中两列之一的值求和。
示例:这是一个 table:
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 添加到总和中。将数据分组以获得摘要,如下所示:
Station 1 West Smith 23
Station 2 North Jones 25
Station 3 South Brown 26
我一直在使用 CASE 语句和 GROUP BY 子句,但似乎得不到我想要的结果。我也尝试过使用 PARTITION,但我还不是很熟练。任何帮助将不胜感激。
只使用条件聚合:
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;