我必須創建一個查詢來查找每個商店銷售產品的前80%。有沒有辦法使用窗口功能來做到這一點?我的表是事務性的數據與以下的列設置:查找每個商店的前80%產品
StoreID | ProductID | NoOfProducts | SoldDate
對於一個店鋪,如果有一個100種不同的產品銷往COUNT(DISTINCT(ProductID))
,我希望得到一個結果集的80個產品的那家商店。我怎麼能這樣做? (我的數據庫環境是SQL Server 2008)
我必須創建一個查詢來查找每個商店銷售產品的前80%。有沒有辦法使用窗口功能來做到這一點?我的表是事務性的數據與以下的列設置:查找每個商店的前80%產品
StoreID | ProductID | NoOfProducts | SoldDate
對於一個店鋪,如果有一個100種不同的產品銷往COUNT(DISTINCT(ProductID))
,我希望得到一個結果集的80個產品的那家商店。我怎麼能這樣做? (我的數據庫環境是SQL Server 2008)
像這樣的東西應該使用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)
這是一個體面的答案。我能夠使用NTILE(100)來分割ProductID並將其過濾出來。謝謝! – codedawg82 2013-02-25 16:40:26
你嘗試SELECT TOP(80)%,受COUNT(DISTINCT(產品ID))命令? – 2013-02-25 18:39:44