group by in sql组合值

chi*_*bis 3 sql sql-server-2008

我有一个表(sql 2008),在col1中有A,B,C,D,E值是否有办法获得按col1分组的计数,以便返回的结果将是

A - #
B - #
other - #
Run Code Online (Sandbox Code Playgroud)

谢谢

Aar*_*and 6

重复CASE表达式有效,但我发现只执行一次表达式就不那么繁琐了.计划完全相同.

;WITH x AS 
(
  SELECT Name = CASE WHEN Name IN ('A','B') THEN Name 
  ELSE 'Other' END
  FROM dbo.YourTable
)
SELECT Name, COUNT(*) FROM x 
GROUP BY Name;
Run Code Online (Sandbox Code Playgroud)

如果排序很重要(例如,Other应该是结果中的最后一行,即使其他名称按字母顺序排在后面),那么您可以说:

ORDER BY CASE WHEN Name = 'Other' THEN 1 ELSE 0 END, Name;
Run Code Online (Sandbox Code Playgroud)


dno*_*eth 5

select
   case when col1 in ('a','b') then col1 else 'other' end,
   count(*)
from tab
group by case when col1 in ('a','b') then col1 else 'other' end
Run Code Online (Sandbox Code Playgroud)