Sql Server分组依据,计数查询

Sql Server分组依据,计数查询,sql,sql-server,Sql,Sql Server,我有以下疑问 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和其他分组在on元素中 差不多 要素1 20000 其他30000 感谢您的帮

我有以下疑问

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和其他分组在on元素中 差不多

  • 要素1 20000
  • 其他30000

感谢您的帮助

您使用的是一个
大小写
表达式,如下所示:

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

其思想是提供一个表达式,根据
mc_owner
字段的值,该表达式计算为您需要的两个值之一,即
'Element1'
其他值

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
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

其思想是提供一个表达式,根据
mcu owner
字段的值,该表达式计算为您需要的两个值之一,即
'Element1'
其他值。

这些结果与查询不匹配(将计数放在第一位)。在我们尝试回答之前,请使您的问题自我一致。并定义定义定义行在“其他”下分组的条件。这不是我只想简化的实际结果。谢谢您的回复。这些结果与查询不匹配(将计数放在第一位)。在我们尝试回答之前,请使您的问题自我一致。同时定义定义行在“其他”下分组的标准。这不是我只想简化的实际结果。谢谢您的回复
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