2014-08-28 2 views
0

У меня есть список продаж для сотен брендов по магазинам, и я хочу получить TOP 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

Добавлено 'SQL-server' тегов на основе' dbo' префиксом и нестандартности ('[..] ')" quoting "style –

ответ

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

Большое спасибо. Ваш подход работает отлично и очень быстро. (9 миллионов строк агрегированы и отсортированы впоследствии через 10 секунд !!!) – Nylix

Смежные вопросы