【问题标题】:Sql Server group by , count querySql Server 分组、计数查询
【发布时间】:2015-03-06 16:39:41
【问题描述】:

我有以下问题

select COUNT(mc_owner) as nbr , mc_owner
from [dbo].[full] 
where (date_reception > '01-01-2015')
group by (mc_owner)
order by nbr desc

这显示了我

  • 20000 元素1
  • 10000 元素2
  • 10000 元素3
  • 10000 元素4

我只需要两个结果 element1 和其他分组在元素上 像

  • 元素1 20000
  • 其他 30000

感谢您的帮助

【问题讨论】:

  • 这些结果与查询不匹配(将计数放在首位)。在我们尝试回答之前,请让您的问题保持一致。
  • 并且还定义了定义何时将行分组到“其他”下的条件。
  • 这不是真正的结果,我只是想简化一下,谢谢你的评论

标签: sql sql-server


【解决方案1】:

您可以使用CASE 表达式来实现,如下所示:

SELECT
    COUNT(*) as nbr,
    CASE mc_owner WHEN 'Element1' THEN 'Element1' ELSE `Others` END as Owner
FROM [dbo].[full] 
WHERE (date_reception > '01-01-2015')
GROUP BY CASE mc_owner WHEN 'Element1' THEN 'Element1' ELSE `Others` END
ORDER BY COUNT(*) DESC

这个想法是提供一个表达式,计算结果为您需要的两个值之一 - 即 'Element1'Others,具体取决于 mc_owner 字段的值。

【讨论】:

    【解决方案2】:
    declare   @tt table(name varchar(10),id int)
    
    insert into @tt(name,id)values ('element1',2000)
    insert into @tt(name,id)values ('element2',2000)
    insert into @tt(name,id)values ('element3',2000)
    insert into @tt(name,id)values ('element4',2000)
    
    
    ;WITH CTE AS
    (
    select ROW_NUMBER()OVER(Partition by ID ORDER BY ID,name) RN, * from @tt 
    
    )
    select NAME,ID from CTE
    where RN = 1
    UNION ALL
    select 'Others' as NAME,SUM(id) as ID 
    from CTE
    where RN >1
    

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 2011-04-08
      • 1970-01-01
      相关资源
      最近更新 更多