1

店舗ごとの販売商品の上位 80% を検索するクエリを作成する必要があります。ウィンドウ関数を使用してこれを行う方法はありますか? 私のテーブルは、次の列を持つトランザクション データ セットです。

StoreID | ProductID | NoOfProducts | SoldDate

ある店舗で 100 種類の商品が販売された場合COUNT(DISTINCT(ProductID))、その店舗で 80 種類の商品の結果セットが得られると予想します。どうすればこれを行うことができますか?(私のDB環境はSQL Server 2008です)

4

1 に答える 1

1

このようなものは、各ストアごとROW_NUMBER()に使用してから、表示する行を決定するために機能するはずです。COUNTこれにより、ProductId でソートされた最初の 80% が常に表示されます。

SELECT 
  t.StoreId,
  t.ProductId,
  t.rn
FROM (
    SELECT StoreId, 
         ProductId, 
         ROW_NUMBER() OVER (Partition BY StoreId ORDER BY ProductId) rn
    FROM YourTable ) t JOIN (
    SELECT StoreId,
         COUNT(DISTINCT ProductId) cnt
    FROM YourTable
    GROUP BY StoreId
  ) t2 on t.StoreId = t2.StoreId
WHERE t.rn <= (t2.cnt*.8)

SQL フィドルのデモ

于 2013-02-25T16:21:20.663 に答える