Sql server 寻找顶级销售人员

Sql server 寻找顶级销售人员,sql-server,Sql Server,我想找到10%的销售人员。如何使用SQL 2005或2008实现这一点 DECLARE @Sales TABLE ( SalesPersonID varchar(10), TotalSales int ) INSERT @Sales SELECT 1, 200 UNION ALL SELECT 2, 300 UNION ALL SELECT 7, 300 UNION ALL SELECT 4, 100 UNION ALL SELECT 5, 600 UNION ALL SELECT 5,

我想找到10%的销售人员。如何使用SQL 2005或2008实现这一点

DECLARE @Sales TABLE 
(
SalesPersonID varchar(10), TotalSales int
)


INSERT @Sales
SELECT 1, 200 UNION ALL
SELECT 2, 300 UNION ALL
SELECT 7, 300 UNION ALL
SELECT 4, 100 UNION ALL
SELECT 5, 600 UNION ALL
SELECT 5, 600 UNION ALL
SELECT 2, 200 UNION ALL
SELECT 5, 620 UNION ALL
SELECT 4, 611 UNION ALL
SELECT 3, 650 UNION ALL
SELECT 7, 611 UNION ALL
SELECT 9, 650 UNION ALL
SELECT 3, 555 UNION ALL
SELECT 9, 755 UNION ALL
SELECT 8, 650 UNION ALL
SELECT 3, 620 UNION ALL
SELECT 5, 633 UNION ALL
SELECT 6, 720 
GO
另外,如果我添加了部门,那么如何编写相同的查询来查找每个部门中的前10%和后10%?我想问两个问题

--Top 10%
SELECT TOP 10 PERCENT SalesPersonID, SUM(TotalSales) FROM @Sales
GROUP BY SalesPersonID
ORDER BY SUM(TotalSales) ASC

--Bottom 10%
SELECT TOP 10 PERCENT SalesPersonID, SUM(TotalSales) FROM @Sales
GROUP BY SalesPersonID
ORDER BY SUM(TotalSales) DESC
例如,如果添加了一列Department varchar(20):

--By Dept
SELECT TOP 10 PERCENT Department, SUM(TotalSales) FROM @Sales
GROUP BY Department
ORDER BY SUM(TotalSales) ASC/DESC //(Whichever one you want)
前10%

select top 10 percent SalesPersonID, sum(TotalSales)
  from Sales
 order by sum(TotalSales)
 group by SalesPersonID
底部10%

select top 10 percent SalesPersonID, sum(TotalSales)
  from Sales
 order by sum(TotalSales) desc
 group by SalesPersonID
cte版本:

DECLARE @Sales TABLE (SalesPersonID varchar(10), TotalSales int)INSERT @Sales
SELECT 1, 200 UNION ALL
SELECT 2, 300 UNION ALL
SELECT 7, 300 UNION ALL
SELECT 4, 100 UNION ALL
SELECT 5, 600 UNION ALL
SELECT 5, 600 UNION ALL
SELECT 2, 200 UNION ALL
SELECT 5, 620 UNION ALL
SELECT 4, 611 UNION ALL
SELECT 3, 650 UNION ALL
SELECT 7, 611 UNION ALL
SELECT 9, 650 UNION ALL
SELECT 3, 555 UNION ALL
SELECT 9, 755 UNION ALL
SELECT 8, 650 UNION ALL
SELECT 3, 620 UNION ALL
SELECT 5, 633 UNION ALL
SELECT 6, 720 


;with a as
(
    select SalesPersonID, sum(TotalSales) as Total
    from @Sales
    group by SalesPersonID
)
select coalesce(a.SalesPersonID, b.SalesPersonID) as SalesPersonID, coalesce(a.Total,b.Total) as Total
from a a
    full outer join a b
        on a.SalesPersonID=b.SalesPersonID
where a.SalesPersonID in (select top 10 percent SalesPersonID from a order by Total desc)
    or b.SalesPersonID in (select top 10 percent SalesPersonID from a order by Total)
order by a.Total desc

谢谢,我可以用CTE吗?我不知道CTE是什么。你能把你的问题扩大到包含它吗?cte代表公共表表达式。我认为你的
orderby
子句应该是另一种方式(
desc
在前10%和
asc
在后10%)。我现在没有一个DB来测试它,但是我很确定顺序应该颠倒过来。我说的对吗?我想你需要一个分组条款,因为你可以在第一栏有多个销售人员……我建议你调整你的问题。从主页上的方式来看,你似乎在试图招聘销售人员:-P