Indulge me a bit more as I find this an interesting conundrum.
If you feel this discussion is extending a bit please migrate it to Theory and Practice.
I still have duplicated data in my table so I'm not committed either way yet.
I'm storing my year and period, not as two text pieces but as a number with sufficient precision.
Year and period are easy to get with \ and MOD and appear on forms (which by their nature show only a tiny sub-set of transactions)
To select the transactions, I take user input for four values, and create two numbers, eg 201009 and 201205. Once, before my query runs.
My query compare is:
BETWEEN 201009 and 201205
Now let's say we have thAcYr and thAcPrd saved in the table as discrete parts and I no longer have the combined thAcYrPrd.
So the query compare is something like (untested it's giving me a headache, it could be flawed):
the OR is to pick up anything in 2011
WHERE
((thAcYr >= StartYear AND thAcPrd >= StartPrd) AND (thAcYr <= EndYear AND thAcPrd <= EndYear))
OR
(EndYear > StartYear+1 AND (thAcYr < EndYear)
I should really do that ? Is there a simpler way ?
edit: I think it is flawed needs more work.