在MS Access 2010
我有一个包含作者的两栏表(出版物)。名字和他们发表文章的那一年。
author year
Davis A 1973
Boyd B 1973
Davis A 1974
Pit L 1974
...
我想找到在两到三年或N年内发布的作者数量(例如,在1973
和1974
中发布的作者,例如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年内发表的作者的名单,那也没关系。谢谢你的帮助。
答案 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
)。