时间:2016-08-11 14:49:59

标签: sql ms-access

我有一个包含年份,季度,团队和价格等列的表格。它显示了团队的每一笔销售。我们在公司有10个团队。 我想知道每年的每个季度,哪三支球队的销量最高。那么我被困在哪里?此时,我将每个团队每季度的总销售额进行分组。仍然缺少o只能获得销量最高的三支最佳球队。到目前为止我得到了这个:

SELECT 
    a1.year,
    a1.quarter,
    a1.team,
    sum(a1.price) as Total

FROM
    tbl_sales a1    

inner JOIN
    tbl_sales a2 
        ON a1.year = a2.year
            and a1.quarter = a2.quarter
            and a1.team = a2.team
            and a1.price = a2.price
     where
           some restrictions here
GROUP BY
    a1.year,
    a1.quarter,
    a1.team

有些东西告诉我,我很接近,只有一个带有top函数的子查询会有所帮助,但我无法弄明白。很感谢任何形式的帮助 :) 非常感谢!

2 个答案:

答案 0 :(得分:0)

在MS Access中,您可以使用IN TOP

执行此操作
select s.*
from tbl_sales as s
where s.team in (select top (3) s2.team
                 from tbl_sales as s2
                 where s2.year = s.year and s2.quarter = s.quarter
                 order by s2.price desc
                );

您可能需要向外部查询和内部查询添加限制,具体取决于它们的内容。

答案 1 :(得分:0)

尝试:

ProcedureName(vcParameters => 'InputParameter1');

编辑,尝试以下操作,您可能需要其他条件以确保获得正确的结果集,但这应该返回where子句中指定的每个季度的前3位,我不知道您为什么使用自己加入所以我把它排除了,但如果有必要可以加入:

SELECT TOP 3
    a1.year,
    a1.quarter,
    a1.team,
    sum(a1.price) as Total

FROM
    tbl_sales a1    

inner JOIN
    tbl_sales a2 
        ON a1.year = a2.year
            and a1.quarter = a2.quarter
            and a1.team = a2.team
            and a1.price = a2.price
     where
           some restrictions here
GROUP BY
    a1.year,
    a1.quarter,
    a1.team

ORDER BY 
    sum(a1.price) DESC

正如您所看到的,除了where子句之外,表之间基本上没有区别,您不仅限于这4个表的联合,它只是一个示例,但请记住,如果您需要覆盖更多的季度你需要添加更多的工会表。这可能变得非常笨拙,因为它要求你随着时间的推移不断向工会添加表。