我有一个包含两列的简单表格,如下所示:
Id | Name
0 | A
1 | A
2 | B
3 | B
4 | C
5 | D
6 | E
7 | E
我想创建一个 SQL 查询,计算每个“名称”在表中出现的次数。但是,我需要其中的一些值来计算它们是否相同。例如,一个普通的分组查询是:
select Name, count(*)
from table
group by Name
上面的查询会产生结果:
Name | Count
A | 2
B | 2
C | 1
D | 1
E | 2
但我需要查询来计算“A”和“B”,就好像它们只是“A”一样,并且计算“D”和“E”就好像它们只是“D”一样,这样结果就会就像:
Name | Count
A | 4 // (2 "A"s + 2 "B"s)
C | 1
D | 3 // (1 "D" + 2 "E"s)
如何进行这种查询?
最佳答案
您可以使用case
进行翻译。此外,您可以使用子查询或 CTE,因此您没有 to repeat yourself :
with cte as (
select
case Name
when 'B' then 'A'
when 'E' then 'D'
else Name
end as Name
from table
)
select Name, count(*)
from cte
group by Name
或与在线翻译表:
select
isnull(R.B, t.Name), count(*)
from table as t
left outer join (
select 'A', 'B' union all
select 'E', 'D'
) as R(A, B) on R.A = t.Name
group by isnull(R.B, t.Name)
关于带有 group by 子句的 SQL 查询,但计算两个不同的值,就好像它们是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662712/