11

特定のストアで販売された上位5つのアイテムを取得するSQLクエリがあります。

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テーブルには->UPCCode、SaleDate、StoreId、TotalDollarSalesがあります

1回のクエリで各店舗で販売された上位5つのアイテムを返すクエリを探しています。複数のクエリを記述してユニオンを使用することはできますが、効率的ではないようです。

1回のクエリで各店舗の上位5つの販売アイテムを取得するにはどうすればよいですか。

前もって感謝します。

4

2 に答える 2

20
;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;
于 2013-03-05T15:58:28.270 に答える
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
于 2013-03-05T15:58:07.583 に答える