Bonjour !
Je dois actuellement réaliser le traitement suivant sous sql server 2000 :
A partir de la table source (id est une clé primaire) :
id b c
----------- ----------- -----------
1 2 3
2 2 3
3 2 3
4 4 4
5 4 4
Je dois obtenir la table faits(facile jusque la) :
id_fait est une clé autoincrémentée
id_fait b c
----------- ----------- -----------
1 2 3
2 4 4
Puis la table piste(c'est la que j'ai des problèmes):
id_fait id
----------- -----------
1 1
1 2
1 3
2 4
2 5
En gros je dois regrouper les enregistrements par colonne b et c en rajoutant une clé autoincrémentée. Je dois ensuite créer une table qui associe les id_fait aux id. (je ne sais pas si j'ai été clair ?)
La seule méthode que j'ai trouvé pour la table piste est la suivante :
Je crée une table de faits temporaire et je fait une jointure avec la table source sur l'intégralité des critères d'agrégation (ici les colonnes b et c)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 insert into #tmp_faits (b,c) select b,c from #source group by b,c insert into piste select id_fait,id from #tmp_faits f inner join #source s on f.b=s.b and f.c=s.c
Ca fonctionne mais à cause de la volumétrie et du nombre important de critères d'agrégations, le traitement devient trop long. J'ai pas mal réfléchi au problème mais je ne vois pas de solution. Quelqu'un aurait-il une solution plus adaptée ?
D'avance merci et joyeux Noël à tous !
Mathieu
Partager