SQL 查询以比较前 5 名销售人员的季度结果
SQL Query to compare the quarterly results for the top 5 salesperson
我有销售人员从2003年Q3到2005年Q2的订单金额数据,我想显示每个季度的结果,销售人员和前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名销售人员,请帮忙。
我想你每季度最多需要 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]
from
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
yr,
qtr
更明确地说明您的需求会很有帮助。如您所见,这两个查询完全不同。在查看您发布的屏幕截图后,我不确定这是否是您要寻找的答案。
我有销售人员从2003年Q3到2005年Q2的订单金额数据,我想显示每个季度的结果,销售人员和前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名销售人员,请帮忙。
我想你每季度最多需要 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]
from
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
yr,
qtr
更明确地说明您的需求会很有帮助。如您所见,这两个查询完全不同。在查看您发布的屏幕截图后,我不确定这是否是您要寻找的答案。