[英]SQL Server 2000: Get person with most sales in each month. (Trouble replacing rank function for SS 2000)
我正在尝试获取销售人员的清单,以及他们在价值上销售最多的月份。 我有有效的查询,但直到现在我才意识到,由于该站点使用的是sql server 2000,因此我将无法使用rank
函数。
这是我当前的查询
select top 5 name, count(*) as amount
from
(
select e.first_name + ' ' + e.last_name name,
RIGHT(CONVERT(VARCHAR(10), oe.entry_date, 105), 7) as date, sum(oe.totalPrice) price,
rank() over(partition by RIGHT(CONVERT(VARCHAR(10), oe.entry_date, 105), 7)
order by sum(oe.totalPrice) desc) as ranking
FROM order_entry oe
INNER JOIN employees e ON oe.sales_rep_emp_number = e.employee_number
group by e.first_name + ' ' + e.last_name, RIGHT(CONVERT(VARCHAR(10), oe.entry_date, 105), 7)
) temp
where ranking = 1
group by name
order by count(*) desc
我需要用不依赖于rank
函数的东西来替换内部查询。 我发现了几种“重现”此功能效果的方法,但它们涉及到制作一个带有标识列的临时表,该列用作等级表。 但是,我有几个排名(每个月一个),所以这行不通。 此外,我认为没有rank
功能,可能还有另一种方法来实现这一目标。
有人有想法么? 谢谢!
您需要回到第一原则。 以下查询获取前5名员工编号:
select top 5 sales_rep_emp_number, COUNT(*) as numMonths
from (select yr, mon, MAX(TotalPrice) as maxTotalPrice
from (select year(oe.entry_date) as yr, month(oe.entry_date) as mon, oe.sales_rep_emp_number,
SUM(totalPrice) as totalPrice
from order_entry oe
group by year(oe.entry_date), month(oe.entry_date), oe.sales_rep_emp_number
) yme
group by yr, mon
) ym join
(select year(oe.entry_date) as yr, month(oe.entry_date) as mon, oe.sales_rep_emp_number,
SUM(totalPrice) as totalPrice
from order_entry oe
group by year(oe.entry_date), month(oe.entry_date), oe.sales_rep_emp_number
) yme
on ym.yr = yme.yr and
ym.mon = yme.mon and
ym.maxTotalPrice = ye.totalPrice
group by sales_rep_emp_number
order by 2 desc
它具有与rank()
相同的“缺陷”-如果多个雇员的销售额相同,则可以将多个雇员视为给定月份的最高雇员。
我已将您加入其他员工信息的部分放在外面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.