2014-10-08 7 views
1

Я просмотрел форум и могу найти множество примеров для решения моей проблемы, но просто не могу собрать все вместе.Запрос с использованием Group By, Top N и Sum

Мое положение типично, что я хотел бы показать 10 лучших клиентов (заказы. [Имя клиента]) по группе (Shop_Lookup.ShopGroup]) за их общий доход.

Я могу получить до сих пор в создании Топ-10 лучших, независимо от ShopGroup, но просто не могу получить голову над тем, как заставить Sub Query работать. Мой текущий код -

SELECT TOP 10 Orders.[Customer Name], 
       Sum(Orders.[Actual Revenue]) AS [SumOfActual Revenue], 
       Orders.[This Month], 
       Shop_Lookup.[ShopGroup] 

FROM Orders 
INNER JOIN Shop_Lookup ON Orders.[ShopID] = ShopLookup.[ShopID]  
WHERE ((Orders.[This Month])="current")  
GROUP BY Orders.[Customer Name], Orders.[This Month], Shop_Lookup.[ShopGroup]  
ORDER BY Sum(Orders.[Actual Revenue]) DESC; 
+0

Хороший вопрос. Если вы не получите правильного ответа, быстро подумайте о добавлении представления конечного результата. – Smandoli

ответ

1

Полностью AIR КОДИРОВАННОЕ! Соблюдайте осторожность.

Вы можете использовать Sub Query, чтобы получить это!

SELECT 
    Orders.[Customer Name], 
    Sum(Orders.[Actual Revenue]) AS [SumOfActual Revenue], 
    Orders.[This Month], 
    Shop_Lookup.[ShopGroup] 
FROM 
    Orders 
    INNER JOIN 
    Shop_Lookup 
    ON 
    Orders.[ShopID] = ShopLookup.[ShopID]  
WHERE 
    (
     (Orders.[This Month] = 'Current') 
     AND 
     (Orders.ShopID IN 
      (SELECT 
       TOP 10 ShopID        
      FROM 
       Orders AS Dupe        
      WHERE 
       Dupe.ShopID = Orders.ShopID  
      ) 
     ) 
    ) 
GROUP BY 
    Orders.[Customer Name], 
    Orders.[This Month], 
    Shop_Lookup.[ShopGroup]  
ORDER BY 
    Sum(Orders.[Actual Revenue]) DESC; 

Более подробную информацию о подзапросов: http://allenbrowne.com/subquery-01.html

+0

Я не проверял это, но он выглядит хорошо - я выхожу на конечность и выживание. – Smandoli

+0

Спасибо @Smandoli, теоретически это должно сработать. Однако без проверки это не может быть подтверждено. :) Спасибо за upvote! – PaulFrancis