Bonjour
Après plusieurs tentative, je vous sollicite à nouveau....
La base sur laquelle je travaille est une base Microsoft SQL Server 2000 et je souhaite mettre en forme les données à l'aide des procédures stockées.
Voila, Les différents évenements arrivent "en vrac" dans une table T_eve_SFR. La table T_cumul_eve_SFR permet de cumuler ces évenements par machine,agent, jourprod(date), equipe,type_machine... et d'avoir la "quantité"
de chaque évenement dans le champs "param".
Pour l'instant pas de problème.
Dans la table T_SFR_RTO, l'objectif est de synthétiser tous les évenements sur une seule ligne, par machine, type_machine, agent, jourprod, equipe, produit... Cette table contient donc tous les champs correspondants aux divers évenements qu'ils puissent y avoir.
Pour chaque évenement la table contient un champ correspondant au nom de l'évenement (à renseigner si il ya une quantité) et un autre correspondant à la quantité de l'évenement. Ces différents éléments sont présents dans la table T_code_eve_SFR.
D'abord j'ai décidé de remplir la table T_SFR_RTO avec les différentes lignes synthétisées avec le code suivant:
Maintenant il "reste" à mettre à jour les champs évenements et quantités...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 insert into T_SFR_RTO ( JourProd, equipe, agent, poste, Produit, Type_Machine_SFR, Machine) select distinct JourProd, equipe, agent, poste,Produit,Type_Machine_SFR,Machine from T_Cumul_eve_SFR update T_SFR_RTO set Usine = 'VAN', atelier = 'RTO', Satelier = 'RTO2', Pvidage = 'P6'
Après plusieurs tentatives... de pivots et autres...je me suis orienté vers l'utilisation de curseurs et donc de sql dynamique pour pouvoir balayer la table T_cumul_eve_SFR et passer les paramêtres évenement, jourprod, equipe, agent, machine, type_machine,produit, afin de d'affecter le bon paramêtre à la bonne ligne dans la table T_SFR_RTO.
Le problème est que j'ai une erreur de synthaxe au niveau de l'exécution de la requète dynamique et plus précisément à cause des variables qui sont considérées non pas comme des valeurs mais comme des noms de champs donc forcément cela ne marche pas!
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 DECLARE @eve VARCHAR(10) DECLARE @agent VARCHAR(10) DECLARE @equipe VARCHAR(10) DECLARE @machine VARCHAR(10) DECLARE @Jourprod VARCHAR(20) DECLARE @type_machine VARCHAR(10) DECLARE @produit VARCHAR(10) DECLARE @query VARCHAR(2000) DECLARE @sql VARCHAR(2000) DECLARE curs_eve CURSOR FOR SELECT T_Code_eve_SFR.Champ_Quantités from T_Code_eve_SFR, T_cumul_eve_SFR where T_cumul_eve_SFR.Code_eve = T_Code_eve_SFR.Code_SFR and T_cumul_eve_SFR.Type_Machine_SFR = T_Code_eve_SFR.Type_Machine_SFR DECLARE curs_agent CURSOR FOR Select agent from T_cumul_eve_SFR DECLARE curs_equipe CURSOR FOR Select equipe from T_cumul_eve_SFR DECLARE curs_machine CURSOR FOR Select machine from T_cumul_eve_SFR DECLARE curs_jourprod CURSOR FOR Select jourprod from T_cumul_eve_SFR DECLARE curs_produit CURSOR FOR Select produit from T_cumul_eve_SFR DECLARE curs_type_machine CURSOR FOR Select Type_Machine_SFR from T_cumul_eve_SFR OPEN curs_eve FETCH curs_eve INTO @eve OPEN curs_equipe FETCH curs_equipe INTO @equipe OPEN curs_agent FETCH curs_agent INTO @agent OPEN curs_machine FETCH curs_machine INTO @machine OPEN curs_jourprod FETCH curs_jourprod INTO @jourprod OPEN curs_type_machine FETCH curs_type_machine INTO @type_machine OPEN curs_produit FETCH curs_produit INTO @produit set @sql = 'UPDATE T_SFR_RTO SET T_SFR_RTO.'+@eve+' = T_cumul_eve_SFR.Param FROM T_Cumul_eve_SFR, T_Code_eve_SFR where T_Cumul_eve_SFR.Code_eve = T_Code_eve_SFR.Code_SFR and T_Cumul_eve_SFR.Type_machine_SFR = T_Code_eve_SFR.Type_Machine_SFR and T_Code_eve_SFR.champ_quantités = '+@eve+' and T_Cumul_eve_SFR.jourprod ='+@jourprod+' and T_Cumul_eve_SFR.agent = '+@agent+' and T_Cumul_eve_SFR.equipe = '+@equipe+' and T_Cumul_eve_SFR.machine = '+@machine+' and T_Cumul_eve_SFR.Type_Machine_SFR = '+@type_machine+' and T_Cumul_eve_SFR.Produit = '+@produit+' and T_SFR_RTO.Jourprod = T_Cumul_eve_SFR.JourProd AND T_SFR_RTO.Type_Machine_SFR = T_Cumul_eve_SFR.Type_Machine_SFR AND T_SFR_RTO.produit=T_Cumul_eve_SFR.produit AND T_SFR_RTO.machine=T_Cumul_eve_SFR.machine AND T_SFR_RTO.agent=T_Cumul_eve_SFR.agent AND T_SFR_RTO.equipe=T_Cumul_eve_SFR.equipe ' exec(@sql) GO
Je ne sais plus quoi essayer. Est -ce que la technique "curseurs" est adaptée à ce genre de manipulation? Ou y-a t-il d'autres moyens utilisant des requètes statiques (avec pivots)?
J'espère avoir été clair dans mes explications! Pour d'avantages de précisions n'hésitez pas à me demander.
Merci d'avance pour le temps que vous m'accordez!
P.S : Ci-joint les scripts et des images des différentes tables utilisées.
Cordialement!!
Partager