1

我必须创建一个查询来查找每家商店销售的前 80% 的产品。有没有办法使用窗口函数来做到这一点?我的表是具有以下列的事务数据集:

StoreID | ProductID | NoOfProducts | SoldDate

对于一家商店,如果销售 100 种不同的产品COUNT(DISTINCT(ProductID)),我希望得到该商店的 80 种产品的结果集。我怎么能这样做?(我的数据库环境是 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 回答