查询以在MS Access中的单个表中查找数据的交叉

时间:2014-07-11 11:24:06

标签: sql ms-access

MS Access 2010我有一个包含作者的两栏表(出版物)。名字和他们发表文章的那一年。

    author   year
    Davis A  1973
    Boyd B   1973
    Davis A  1974
    Pit L    1974
...

我想找到在两到三年或N年内发布的作者数量(例如,在19731974中发布的作者,例如Davis A。我知道这可以通过SQL intersect(就像这样)来完成

SELECT publications.author, publications.year
FROM publications
WHERE publications.year=1973
INTERSECT
SELECT publications.author, Author_year_unique_year.year
FROM publications
WHERE publications.year=1974;

但Access没有Intersect,解决方案显然是Join,但我只有一个表。或者不是数字,如果我能得到那些在N年内发表的作者的名单,那也没关系。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用子查询:

select years, count(*), min(author), max(author)
from (select author, count(*) as years
      from (select distinct author, year
            from publications
           ) as p
      group by author
     ) as t
group by years
order by years;

如果您想要两年,您还可以使用带有having子句的聚合:

select author
from publications
group by author
having sum(iif(year = 1973, 1, 0)) > 0 and
       sum(iif(year = 1974, 1, 0)) > 0

having子句中的每个条件都计算给定年份中作者的出版物数量。 > 0找到至少有一个作者。此结构非常灵活,您可以轻松添加更多年份或排除特定年份(使用= 0代替> = 0)。