2014-08-28 91 views
0

我有一個商店的數百個品牌的銷售清單,我希望通過銷售獲得每個商店排名前100的品牌。相關的SQL子查詢返回的行數太少

由於某些未知原因,每個商店僅返回99個品牌。 (在源表中有每每家店鋪超過900個品牌。)

這是我的查詢:

SELECT TOP (100) PERCENT SHOP, BRAND, SALES 
FROM dbo.[DATA] AS D 
WHERE (BRAND IN 
    (SELECT TOP (100) WITH TIES BRAND 
     FROM DATA 
     WHERE (SHOP= D.SHOP) 
     ORDER BY SALES DESC 
    ) 
) 
ORDER BY BRAND, SALES DESC 

出了什麼問題?

+0

添加'基礎上,'dbo'前綴和非標準的SQL-server'標籤('[..] ')「引用」風格 – 2014-08-28 08:49:45

回答

0

我想你正在嘗試做的可以通過下面的查詢來實現

SELECT Q.SHOP 
    , Q.BRAND 
    , Q.SALES 
FROM (
    SELECT SHOP 
     , BRAND 
     , SALES 
     , ROW_NUMBER() OVER (PARTITION BY SHOP ORDER BY SALES DESC) rn 
    FROM dbo.[DATA] 
    ) Q 
WHERE Q.rn <= 100 
ORDER BY Q.BRAND, Q.SALES DESC 
+0

非常感謝。你的方法完美,非常快速。 (在10秒內彙總並分類了900萬行!!!) – Nylix 2014-08-28 12:38:28