无法对MS Access SQL多个搜索查询进行分组

时间:2013-09-24 14:51:18

标签: sql ms-access

在我忘记之前,请你能帮助我吗?我现在花了一段时间在这上面,并求助于你们有用的人。我有一个搜索查询:

SELECT  Groups.GroupID, 
        Groups.GroupName, 
        (   SELECT  Sum(SiteRates.SiteMonthlySalesValue) 
            FROM    SiteRates 
            WHERE   InvoiceSites.SiteID = SiteRates.SiteID
        ) AS SumOfSiteRates, 
        (   SELECT  Count(InvoiceSites.SiteID) 
            FROM    InvoiceSites 
            WHERE   SiteRates.SiteID = InvoiceSites.SiteID
        ) AS CountOfSites
FROM    (InvoiceSites 
        INNER JOIN (Groups 
            INNER JOIN SitesAndGroups 
                ON Groups.GroupID = SitesAndGroups.GroupID
        ) ON InvoiceSites.SiteID = SitesAndGroups.SiteID) 
        INNER JOIN SiteRates 
            ON InvoiceSites.SiteID = SiteRates.SiteID
GROUP BY Groups.GroupID

使用以下表关系

enter image description here http://m-ls.co.uk/ExtFiles/SQL-Relationship.jpg

如果没有GROUP BY条目,我可以获得我想要的条目列表,但它会按SiteID向下钻取结果,而不是我想要GroupID组合。我知道这是可能的,但缺乏完成此任务的专业知识。

任何帮助都会受到大力赞赏。

2 个答案:

答案 0 :(得分:2)

我认为您需要做的就是将groups.Name添加到GROUP BY子句中,但是我会采用稍微不同的方法,并尽可能避免使用子查询。由于您已加入所有必需的表,因此您可以使用常规聚合函数:

SELECT  Groups.GroupID, 
        Groups.GroupName, 
        SUM(SiteRates.SiteMonthlySalesValue) AS SumOfSiteRates, 
        COUNT(InvoiceSites.SiteID) AS CountOfSites
FROM    (InvoiceSites 
        INNER JOIN (Groups 
            INNER JOIN SitesAndGroups 
                ON Groups.GroupID = SitesAndGroups.GroupID
        )   ON InvoiceSites.SiteID = SitesAndGroups.SiteID) 
        INNER JOIN SiteRates 
            ON InvoiceSites.SiteID = SiteRates.SiteID
GROUP BY Groups.GroupID, Groups.GroupName;

答案 1 :(得分:0)

我认为您正在寻找的是以下内容:

SELECT Groups.GroupID, Groups.GroupName, SumResults.SiteID, SumResults.SumOfSiteRates, SumResults.CountOfSites
FROM Groups INNER JOIN 
(
SELECT SitesAndGroups.SiteID, Sum(SiteRates.SiteMonthlySalesValue) AS SumOfSiteRates, Count(InvoiceSites.SiteID) AS CountOfSites
FROM SitesAndGroups INNER JOIN (InvoiceSites INNER JOIN SiteRates ON InvoiceSites.SiteID = SiteRates.SiteID) ON SitesAndGroups.SiteID = InvoiceSites.SiteID
GROUP BY SitesAndGroups.SiteID
) AS SumResults ON Groups.SiteID = SumResults.SiteID

此查询将根据您想要的SiteID对您的信息进行分组。在链接到Groups表的from语句中引用该查询以提取所需的组信息。