2013-02-25 57 views
1

我必須創建一個查詢來查找每個商店銷售產品的前80%。有沒有辦法使用窗口功能來做到這一點?我的表是事務性的數據與以下的列設置:查找每個商店的前80%產品

StoreID | ProductID | NoOfProducts | SoldDate 

對於一個店鋪,如果有一個100種不同的產品銷往COUNT(DISTINCT(ProductID)),我希望得到一個結果集的80個產品的那家商店。我怎麼能這樣做? (我的數據庫環境是SQL Server 2008)

+0

你嘗試SELECT TOP(80)%,受COUNT(DISTINCT(產品ID))命令? – 2013-02-25 18:39:44

回答

1

像這樣的東西應該使用ROW_NUMBER(),然後使用COUNT每個商店來確定顯示哪些行。這將始終顯示第一個80%,按ProductID分類:

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

+0

這是一個體面的答案。我能夠使用NTILE(100)來分割ProductID並將其過濾出來。謝謝! – codedawg82 2013-02-25 16:40:26

相關問題