首页 > 解决方案 > SQL 如何将多个字段与 Case 和 Sum 语句结合起来

问题描述

我试图通过首先将多个数据点重命名为相似名称并将这些数量相加来聚合我的数据。我尝试了以下方法:

select  CASE
when Category='1' or Category='2' Then 'TEST'
when Category='3' Then 'ACTUAL' 
else category end As Activity, 
sum(case when quantity >0 then quantity end) from DataBase 
Group By category

输出是这样的:

Activity   |  Quantity  
  Test     |    8  
  Actual   |    20  
  Test     |    2  

但是,我希望它看起来像这样:

Activity   |  Quantity  
Test       |  10  
Actual     |  20 

标签: sql

解决方案


一些数据库允许在 中使用别名GROUP BY,但不是全部。您可以重复CASE表达式:

select (case when Category in ('1', '2') then 'TEST'
             when Category = '3' then 'ACTUAL'
             else category
        end) As Activity,
      sum(case when quantity >0 then quantity end)
from DataBase
group by (case when Category in ('1', '2') then 'TEST'
               when Category = '3' then 'ACTUAL'
               else category
          end);

请注意,某些数据库允许您编写:

group by Activity

推荐阅读