2013-03-05 17 views
8

SQL問合せでは、特定のストアで上位5個のアイテムを取得できます。SQLグループBY、各グループの上位N個のアイテム

SELECT TOP 5 S.UPCCode, SUM(TotalDollarSales) FROM Sales S 
WHERE S.StoreId = 1 
GROUP BY S.UPCCode 
ORDER BY SUM(S.TotalDollarSales) desc 

Salesテーブルが持っている - 私は、単一のクエリで私に店舗ごとに販売トップ5項目を返しますクエリを探しています> UPCCode、SaleDate、StoreId、TotalDollarSales

。私は複数のクエリを書くことができますし、ユニオンを使用しても効率的ではないようです。

1つのクエリで各店舗の上位5個の商品を取得するにはどうすればよいですか。

ありがとうございます。

+0

可能重複http://stackoverflow.com/questions/757763/top-n-problem-with-group -by-clause) –

答えて

16
;WITH s AS 
(
    SELECT StoreID, UPCCode, tds, rn = ROW_NUMBER() 
    OVER (PARTITION BY StoreID ORDER BY tds DESC) 
    FROM 
    (
    SELECT StoreID, UPCCode, tds = SUM(TotalDollarSales) 
    FROM Sales 
    GROUP BY StoreID, UPCCode 
) AS s2 
) 
SELECT StoreID, UPCCode, TotalDollarSales = tds 
FROM s 
WHERE rn <= 5 
ORDER BY StoreID, TotalDollarSales DESC; 
([GROUP BY句とTOP Nの問題]の
7

はこれを試してみてください。

select ss.StoreId,is.* 
from (select distinct StoreId from Sales) ss 
cross apply (SELECT TOP 5 S.UPCCode, SUM(TotalDollarSales) as SumTotalDollarSales FROM Sales S 
      WHERE S.StoreId = ss.StoreId 
      GROUP BY S.UPCCode 
      ORDER BY SUM(S.TotalDollarSales) desc) is 
関連する問題