Bonsoir,

J'ai un bout de code SQL que je souhaite optimiser.

Voici la table source A:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Pk date_debut date_fin
1    06.05.2012  02.03.2013
2    02.09.2012  06.10.2012
Je souhaite 'multiplier' les enregistrements selon le nb de mois-années, dans la table B:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Pk  FK Mois Annee
1    1   05   2012
2    1   06   2012
etc.
3    1   03   2013
4    2   09   2013
5    2   10   2013

Le code qui marche mais qui est très long est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Select distinct
Pk
,extract(month from add_months(date_debut, level-1)) as MONTH
,extract(yeaR    from add_months(date_debut, level-1)) as YEAR
from (SELECT * FROM A)
connect by level <= TRUNC(months_between (date_fin,date_debut) ) +1
Je sent que ce code est optimisable car je n'aime pas les distinct et que pour une ligne (where Pk=1) ca va très vite, alors que la ca cross join les mois année n fois... puis le distinct néttoie péniblement.

Avez-vous une idée pour éviter ce distinct ?