不是瀑布式分组的SQL CASE语句

不是瀑布式分组的SQL CASE语句,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有三类: categories number_units CAT_A 10 CAT_B 20 CAT_C 30 如果我对列类别进行分组,我将得到上面看到的3个类别。但如果我想做一个案例陈述,比如: SELECT CASE WHEN categories LIKE 'CAT%' ... 要显示包含CAT的所有类别的总和,它将排除CAT_A、_B、_C等类别 如何编写将获得以下结果的查询: categories sum CAT

我有三类:

categories   number_units
CAT_A        10 
CAT_B        20
CAT_C        30
如果我对列类别进行分组,我将得到上面看到的3个类别。但如果我想做一个案例陈述,比如:

SELECT CASE WHEN categories LIKE 'CAT%' ...
要显示包含CAT的所有类别的总和,它将排除CAT_A、_B、_C等类别

如何编写将获得以下结果的查询:

categories   sum
CAT          60
CAT_A        10
CAT_B        20
CAT_C        30

许多数据库支持标准分组集功能:

select coalesce(category, 'CAT'), sum(number_of_units)
from t
group by grouping sets ((), category);

许多数据库支持标准分组集功能:

select coalesce(category, 'CAT'), sum(number_of_units)
from t
group by grouping sets ((), category);
我认为使用汇总是您的下注选项。在这个场景中,使用多维数据集也会返回相同的结果

 create table cat(categories varchar(50),   number_units int);
 insert into cat values('CAT_A',        10);
 insert into cat values('CAT_B',        20);
 insert into cat values('CAT_C',        30);
查询:

 select Coalesce(categories,'CAT')categories   ,sum(number_units) [sum] 
 from cat 
 group by categories with rollup
 order by categories

 GO
输出:

类别 总和 猫 60 猫科动物 10 B类 20 C类 30 我认为使用汇总是您的下注选项。在这个场景中,使用多维数据集也会返回相同的结果

 create table cat(categories varchar(50),   number_units int);
 insert into cat values('CAT_A',        10);
 insert into cat values('CAT_B',        20);
 insert into cat values('CAT_C',        30);
查询:

 select Coalesce(categories,'CAT')categories   ,sum(number_units) [sum] 
 from cat 
 group by categories with rollup
 order by categories

 GO
输出:

类别 总和 猫 60 猫科动物 10 B类 20 C类 30
使用您正在使用的数据库标记您的问题。在sqlhi中使用rollup,您可以根据您感兴趣的表达式进行分组,前提是表达式不是语句。使用您正在使用的数据库标记您的问题。在sqlhi中使用rollup,你可以根据你感兴趣的表达式分组,因为case是一个表达式而不是一个语句。case是显示两个分组的一种方式。比如说,如果我想用CAT对所有内容进行分组,然后对该列中的任何值进行分组,不管它是否有CAT?很好!这个和卷起有什么区别?@banana_99。通过分组集,可以精确地指定要分组的列。ROLLUP实现了一个层次集,所以它没有那么灵活。是显示两个分组的一种方式。比如说,如果我想用CAT对所有内容进行分组,然后对该列中的任何值进行分组,不管它是否有CAT?很好!这个和卷起有什么区别?@banana_99。通过分组集,可以精确地指定要分组的列。ROLLUP实现了一个层次集,因此它没有那么灵活。