2016-05-05 11 views
1

イベントに参加した人のイベント名と開始日と終了日を持つテーブルが与えられました。イベントの開始年と終了年を指定します。年ごとにラベルを作成します

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 

私はもともと各年の個別のクエリを実行して、それらを一緒に戻って合併すると思ったが、彼らはより多くの年を追加することがスケールことができません。これをアクセスするにはどうすればいいですか?

答えて

1

タリーテーブルは、あなたが後にしているものと呼ばれます。この場合、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 
2

値私は、これが発生する可能性があるすべての年を含む表を作成することなく行うことができるとは思いません。このテーブルを想定し

tblYearsと呼ばれるなど2001年、2002年、2003年、のような値が含まれていYearというフィールドを持っている、あなたは、このクエリを使用して所望の出力を作成することができ、イベントが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に年が記入されていない場合は、このクエリに行がありません。 1つのイベント参加の年間の範囲が不足している場合は、そのイベントの参加に1つの出力行があり、イベント名に年が追加されません。あなたはtblEventParticipationsにこのデータを再挿入したい場合は

ちょうどこのようにそれを挿入します。

INSERT INTO tblEventParticipations 
SELECT ... 
+0

@TKESuperDaveを、これはあなたの問題を解決しましたか? – Leviathan

関連する問題