我已经获得了一张表,其中包含活动名称以及参与活动的人的开始日期和结束日期。
ID | Event | StartYear | EndYear
----------------------------------
1 | Race | 2001 | 2005
2 | Race | 2003 | 2004
3 | Race | 2004 | 2004
我需要打破有人参加活动的年份,以便每年参与活动的人创建一个新行,并将年份附加到活动名称。所以它看起来像这样:
ID | Event
--------------
1 | Race 2001
1 | Race 2002
1 | Race 2003
1 | Race 2004
1 | Race 2005
2 | Race 2003
2 | Race 2004
3 | Race 2004
我原本以为每年都会进行个别查询,然后将它们合并在一起,但由于它们会增加更多年份,因此无法扩展。我怎样才能在访问中这样做?
答案 0 :(得分:2)
如果不创建包含可能发生的所有可能年份的表格,我认为不能做到这一点。
假设此表名为tblYears
并且有一个名为Year
的字段,其中包含类似2001,2002,2003等的值,则可以使用此查询创建所需的输出,假设事件为存储在tblEventParticipations
:
SELECT e.ID, e.Event & ' ' & y.Year AS Event
FROM tblEventParticipations AS e
LEFT JOIN tblYears AS y
ON (y.Year BETWEEN e.StartYear AND e.EndYear)
如果您在tblYears
中缺少一年,则此查询中也会丢失该行。如果缺少一个活动参与的整个年份范围,那么您将有一个参与该活动的输出行,而不会在活动名称后附加年份。
如果您想将此数据重新插入tblEventParticipations
,只需将其插入:
INSERT INTO tblEventParticipations
SELECT ...
答案 1 :(得分:1)
Tally表被称为你所追求的。在这种情况下,tallytbl有1列"年"和价值观2001,2002,2003,2004,2005
select c.ID,c.Event,b.Year
from giventbl c
inner join tallytbl b
on c.startyear <= b.year and c.endyear >= b.year
order by c.ID, b.year