Bonjour à tous, amis SQLeur
Je viens faire appel à vos connaissances car je bloque sur une requête.
je vous présente le problème :
Je fais un petit Datawarehouse et j'ai besoin d'affecter des clés de substitution à certains enregistrement.
Je me lance donc dans l'aventure et je veux assigner une clé de substitution à chaque date pour une dimension temps.
J'ai déjà créé une table reprenant une échantillon de date s'étalant sur deux ans et je leur fait correspondre une clé de substitution. Cela donne par exemple
DATE - Clé
1/1/2007 - 1
27/1/2007 - 27
Mais ou est le problème la dedans???!!!
Et bien par exemple je possède une table de vente avec des dates, et je veux faire correspondre à chaque date la clé de substitution correspondante. Je vais donc aller chercher la valeur correspondante dans la table que j'ai déjà créée, MAIS ca me prend énormément de ressources et de temps... Pour vous dire, après 1 minutes à peine 1000 enregistrements ont été traités...
Ma question est donc : n'y-a-t'il pas un moyen rapide et économique de faire la correspondance pour assigner rapidement une clé de substitution à chaque date dans une table???
Voila le code pour que vous compreniez mieux ce que je veux faire
MERCI d'avance en tout cas de vous pencher sur mon cas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 declare @DateVente datetime --Date réelle de la vente declare @i int --le traditionnel compteur declare @tempsSubstitution int --la clé de substitution set @i = 1 while @i < 97305 -- Nombre d'enregistrement begin set @DateVente = (select distinct date from fait_Vente Where ID_Vente = @i) -- Je fais un distinct car ma table fait vente est une fusion de deux tables.. je n'ai pas de clé primaire dedans donc nous pouvons avoir plusieurs ID_Vente égaux... J'ai fusionné les tables Vente et Ligne_Vente set @TempsSubstitution = (Select ID_Temps from reference_temps where date_temps = @Datevente Update fait_vente set ID_Temps = @TempsSubstitution where ID_vente = @i set @i = @i +1 end )
A bientot,
Matt![]()
Partager