【问题标题】:T-SQL query to return specific Region and group all result for that Region by the first few charactersT-SQL 查询返回特定区域并按前几个字符对该区域的所有结果进行分组
【发布时间】:2015-08-20 20:47:01
【问题描述】:

我正在尝试在 T-SQL 中编写一个查询以按区域返回特定结果,并按区域名称的前几个字符对这些结果进行分组。我还需要将所有与正在搜索的区域名称不同的结果分组为“其他”。

   Region             Total 
USA Servers West      100
USA Servers East      400
Canada Servers        120
Europe Servers         80
Asia Servers           70
Mexico Servers         50

我需要将美国服务器分组为 1 个区域,当我搜索美国和加拿大服务器时,返回它们的总数,但返回所有其他区域的总数作为其他。

   Region          Total
USA Servers         500
Canada Servers      120
Others              200

获得这些结果的最简单方法是什么?

【问题讨论】:

  • 要优化我的搜索以仅选择加拿大服务器和其他,我将如何执行该任务?有时我需要选择其他地区的其他人。

标签: sql sql-server tsql select


【解决方案1】:

解决这个问题的一种方法是使用case 表达式:

SELECT   region, SUM(total) AS total
FROM     (SELECT CASE WHEN region LIKE 'USA Servers%' THEN 'USA Servers'
                      WHEN region LIKE 'Canada Servers%' THEN 'Canada Servers'
                      ELSE 'Others'
                 END AS region,
                 total
          FROM   servers) t
GROUP BY region

【讨论】:

  • 感谢您提供此解决方案。这非常适合我需要的东西。感谢大家的帮助!
  • 要优化我的搜索以仅选择加拿大服务器和其他,我将如何执行该任务?有时我需要选择其他地区的其他人。
  • @TugStrongly 添加处理它们的where region not like 'USA Servers%' clause to the inner query, and you could drop the case` 分支。
【解决方案2】:
select 'USA Servers',    sum(total) 
  from servers 
 where region like 'USA Servers%' 
union all
select 'Canada Servers', sum(total)
  from servers 
 where region like 'Canada Servers%'
union all
select 'Other Servers',  sum(total)
  from servers 
 where region not like 'USA Servers%'
   and region not like 'Canada Servers%'

【讨论】:

  • 对这个和 3 个老问题连续投票?长大了。
猜你喜欢
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2014-01-07
相关资源
最近更新 更多