Salve a tutti , posto perche nn riesco a risolvere un problema di logica


Allora diciamo che ho una tabella dove vi sono delle info relatrive a delle persone tra cui vi è il campo "Data Inizio" e "Data Fine" di una certa attività.

Quello che devo riuscire ad ottenere da una query è una tabella in cui per ogni mese (e relativo anno) riesca ad ottenere il numero persone che stiano effettivamente lavorando. Tali dati mi serviranno successivamente per costruire dei grafici

quello che ho scritto io è

codice:
SELECT Mesi.mesi, Mesi.Indice, YEAR(Tirocinanti.[Data inizio]) AS Anno, Count(YEAR(Tirocinanti.[Data inizio])) AS NumeroTirocinanti
FROM Mesi INNER JOIN Tirocinanti ON (Mesi.indice>=MONTH(Tirocinanti.[Data inizio])) AND (Mesi.indice<=MONTH(Tirocinanti.[Data conclusione]))
GROUP BY Mesi.mesi, Mesi.Indice, YEAR(Tirocinanti.[Data inizio])
ORDER BY YEAR(Tirocinanti.[Data inizio]), Mesi.Indice;
La tabella Mesi è una semplice tabella che contiene le coppie ('Gennaio', 01) etc...

Ovviamente è chiaro che nn posso controllare solo il mese (come ho fatto io) per capire se un tirocinante sta lavorando in quel mese di quel determinato anno...

ES.
TirocinaNTE : XXX
Data inizio = 01/09/2005
Data conclusione = 01/08/2006

allora nella riga della query finale che contiene la TERNA (Gennaio, 2006) il tirocinante in questione nn verra mai conteggiato poiche "Mese inizio>GENNAIO"

L'unica soluzione che ho trovato ha questo problema e crearmi una tabella con tutti gli ipotetici giorni da controllare ("che in realta nn conosco a priori ma dipendono direttamente dal contenuto della tabella Trocinanti") e di joinarla con la tabella tirocinanti andando poi ad utilizzare l'operatore beetween all'ìinterno del join .. soluzione brutale ed impraticabile... per poi utilizzare coi l'operatore count.

Avete qualche consiglio per me?