查找每个商店的前80个Pct产品

时间:2013-02-25 16:06:38

标签: sql-server

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

StoreID | ProductID | NoOfProducts | SoldDate

对于一家商店,如果销售了100种不同的产品COUNT(DISTINCT(ProductID)),我希望该商店能够获得80种产品的结果。我怎么能这样做? (我的数据库环境是SQL Server 2008)

1 个答案:

答案 0 :(得分: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 Fiddle Demo