Найти лучших продавцов - PullRequest
3 голосов
/ 08 мая 2009

Я хочу найти Top и Bottton 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% в каждом отделе? Я хочу оба запроса.

Ответы [ 3 ]

3 голосов
/ 08 мая 2009

ТОП 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
1 голос
/ 08 мая 2009
--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)
0 голосов
/ 08 мая 2009

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...