Utilisation du connect by level
Bonsoir,
J'ai un bout de code SQL que je souhaite optimiser.
Voici la table source A:
Code:
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:
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:
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 ?