繁体   English   中英

SQL服务器多级排名

[英]Ranking at Multiple Levels on SQL Server

我已经阅读了几种执行此操作的方法,但它似乎对我不起作用。 我正在尝试提取具有类别、商品代码和销售额的数据。 我总结了一段时间,所以我的基本查询如下所示:

select 
    Category
    , Itemcode
    , sum(Sales)
    , rank() over (partition by Category order by sum(Sales) desc) as ItemRank
from 
    Sales
group by 
    Category, Itemcode

当我这样做时,我的数据如下所示:

在此处输入图像描述

我想做的是添加另一个排名,以显示整个类别的排名。

是这样的:

在此处输入图像描述

添加后的查询会是什么样子? 我已经尝试了几件事,但我似乎无法让它发挥作用。

在这里猜测一下,但我知道你想根据 TotalSales 进行排名? 如果是这样,您可以加入子查询进行聚合,然后在另一个排名列中使用它:

declare @Sales table (Category varchar(25), ItemCode int, Sales int)

insert into @Sales 
values
    ('Category A', 123, 100),
    ('Category A', 234, 125),
    ('Category A', 345,  97),
    ('Category B', 456, 354),
    ('Category B', 567, 85),
    ('Category B', 678, 112)
    
select 
s.Category
, Itemcode
, sum(s.Sales)
, rank() over (partition by s.Category order by sum(Sales) desc) as ItemRank
, dense_rank() over (order by sum(TotalSales) desc) as CategoryRank
from @Sales s
join    (   select Category, sum(Sales) as TotalSales 
            from @Sales 
            group by Category
        ) d
on s.Category = d.Category

group by s.Category, Itemcode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM