我必须创建一个查询,以查找每个商店销售产品的前80%。有没有办法使用窗口函数来做到这一点?我的表是一个事务数据集,包含以下列:
StoreID | ProductID | NoOfProducts | SoldDate
对于一家商店,如果销售了100种不同的产品COUNT(DISTINCT(ProductID))
,我希望该商店能够获得80种产品的结果。我怎么能这样做? (我的数据库环境是SQL Server 2008)
答案 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)