Bonsoir,
J'ai un bout de code SQL que je souhaite optimiser.
Voici la table source A:
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 Pk date_debut date_fin 1 06.05.2012 02.03.2013 2 02.09.2012 06.10.2012
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 :
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.
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
Avez-vous une idée pour éviter ce distinct ?
Partager