2014-10-08 174 views
1

我已浏览论坛,可以找到各种示例来解决我的问题,但不能将所有内容放在一起。使用Group By,Top N和Sum的查询

我的情况是典型的,我希望按组(Shop_Lookup.ShopGroup))显示前10位客户(订单。[客户名称])的总收入。

无论ShopGroup如何,我都可以获得整体排名前10位的排名,但却无法让我的头部得到子查询的工作。我目前的代码是 -

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 2014-10-08 17:06:01

回答

1

完全AIR编码!谨慎行事。

你可以使用子查询来获得这个!

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 2014-10-08 17:04:30

+0

谢谢@Smandoli,理论上它应该工作。但是,如果没有测试,则无法确认。 :)感谢upvote! – PaulFrancis 2014-10-09 08:55:00