2009-05-08 15 views
3

Topとbottonの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%を見つけるために同じクエリを書くことができますか?私は両方のクエリが欲しいです。

+1

あなたの質問を調整することをお勧めします。それはメインページにあるように、あなたは販売人を雇うように見えます:-P –

答えて

1
--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 

あなたは例えば列部門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

最初の列に2人以上のセールスパーソンを持つことができるので、group by節が必要です。 –

+0

@Pabloありがとうございました。 –

3

TOP 10%

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

BOTTOM 10%

select top 10 percent SalesPersonID, sum(TotalSales) 
    from Sales 
order by sum(TotalSales) desc 
group by SalesPersonID 
+0

ありがとうCTEでこれを行うことはできますか? – Hitz

+0

CTEは何か分かりません。それを含めるために質問を強化できますか? –

+0

cteは共通テーブル式の略です。 – DForck42

0

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 
関連する問題