带有 group by 子句的 SQL 查询,但计算两个不同的值,就好像它们是相同的

标签 sql sql-server sql-server-2008-r2

我有一个包含两列的简单表格,如下所示:

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/

相关文章:

sql-server - SQL Server 2008 R2 中的窗口函数问题

sql - 在 SQL Server 中查找仅包含数据库的 DLL SQL 程序集

android - 有人可以向我解释制作 sqlcipher 二进制文件的编译步骤吗?

sql - 包含变量与常量字符串 SQL Server 的执行速度要慢得多

asp.net - IIS 区域设置

sql-server - 在触发器顶部添加 SET NOCOUNT ON

mysql : how to calculate business hrs between two timestamps and neglect weekends

Python - 如何插入 NULL mysql 值

mysql - Sql 选择顶部查询

sql-server-2008 - 将插入的数据从 SQL Server 推送到应用程序的最佳方法是什么?