相关文章推荐
刀枪不入的红薯  ·  IllegalArgumentExcepti ...·  2 天前    · 
勤奋的柿子  ·  datetime ...·  2 天前    · 
奋斗的皮蛋  ·  Integration Services ...·  3 天前    · 
乖乖的夕阳  ·  Python画图标题 ...·  1 年前    · 
气势凌人的核桃  ·  android recyclerview ...·  1 年前    · 
谦逊的小熊猫  ·  Asp.Net Core ...·  1 年前    · 

比较前5名销售人员的季度业绩的SQL查询

0 人关注

我有2003年第三季度至2005年第二季度的销售人员订单金额的数据,我想显示每个季度的结果,销售人员和前5名销售人员的总订单金额。

我有这样的 sql 语句

select DATEPART (Year, [Order Date]) AS Year,
       DATEPART (QUARTER,[Order Date]) As Quarter, 
       Salesperson, 
       SUM([Order Amount]) As [Total Order Amount] 
from dbo.tbl_sales 
Group By DATEPART (YEAR, [Order Date]),  
         DATEPART (QUARTER, [Order Date]), 
         Salesperson 
Order By  SUM([Order Amount]) DESC

但它不仅显示前5名的销售人员,请帮助。

7 个评论
它显示的是什么?
Leo
它按季度显示所有销售订单的金额。
可以提供一个数据列表的图片,其中会提到你想要的东西和数据的显示方式。
Leo
嗨,阿尼克,对不起,请问如何在这里附上打印屏幕?
你不能这样做,你没有足够的声誉。把照片上传到某个地方,然后把链接粘贴到这里,然后把你的照片和你的问题一起附上。
Leo
结果中应该是这样的,谢谢。 dropbox.com/s/wod0kl2uo35vdiu/printscreen.bmp?dl=0
Leo
这是我的SQL语句的部分结果。 dropbox.com/s/pwnw2p1jo7t7dba/now.JPG? dl=0
sql-server-2008
Leo
Leo
发布于 2015-02-23
1 个回答
shawnt00
shawnt00
发布于 2015-02-26
已采纳
0 人赞同

我认为你每季度最多想要5个。试试这个。

select *
from (
    select
        T.Year, T.Quarter, T.Salesperson, T.[Total Order Amount],
        rank() over (partition by T.Year, T.Quarter order by T.[Total Order Amount] desc) as rnk
    from (
        select
            datepart(yy, [Order Date]) AS Year,
            datepart(qq,[Order Date]) As Quarter, 
            Salesperson, 
            sum([Order Amount]) As [Total Order Amount]
        from dbo.tbl_sales 
        group by
             datepart(yy, [Order Date]),  
             datepart(qq, [Order Date]), 
             Salesperson 
    ) as T
) as T2
where T2.rnk <= 5
order by T2.Year, T2.Quarter, T2.rnk, T2.Salesperson

如果你想对所有季度的前5名进行排名,然后只对那几个季度进行细分,那么可以试试这个。

with top5 as (
    select Salesperson, rnk from (
        select Salesperson, rank() over (order by sum([Order Amount]) desc) as rnk
        from dbo.tbl_sales
        group by Salesperson
    ) as T
    where rnk <= 5
select
    datepart(yy, [Order Date]) as yr,
    datepart(qq, [Order Date]) as qtr, 
    s.Salesperson, 
    sum([Order Amount]) As [Quarterly Order Amount] 
    dbo.tbl_sales as s inner join
    top5 on top5.Salesperson = s.Salesperson
group by
    datepart(yy, [Order Date]),  
    datepart(qq, [Order Date]), 
    s.Salesperson 
order by