Je viens poster ici car la boite à MP de notre ami SQLPro est pleine, impossible de le contacter !
J'ai suivi ce cours : http://sqlpro.developpez.com/cours/gestiontemps/#L6
Et j'ai quelques petits soucis avec le script d'update des rangs
L'erreur que j'ai eu en exécutant les update :
Tous les rangs trimestre et semestre sont NULL. Et je crois que la valeur pour les rangs semaine n'est pas juste. Voici ce que j'ai pour le 01/01/2014 par exemple :(2568*ligne(s) affectée(s))
(2568*ligne(s) affectée(s))
Avertissement*: la valeur NULL est éliminée par un agrégat ou par une autre opération SET.
(2568*ligne(s) affectée(s))
Msg*8134, Niveau*16, État*1, Ligne*57
Division par zéro.
L'instruction a été arrêtée.
Msg*8134, Niveau*16, État*1, Ligne*75
Division par zéro.
L'instruction a été arrêtée.
Je copie l'update pour les ceusses qui ont la flemme d'aller voir sur l'article :PJR_DATE PAN_ID PMS_ID PJM_ID PSM_ID PJS_ID PJA_ID PTR_ID PST_ID PJR_RANG_JOUR PJR_RANG_SEMAINE PJR_RANG_MOIS PJR_RANG_TRIMESTRE PJR_RANG_SEMESTRE PJR_RANG_AN PJR_ALEA
2014-01-01 00:00:00.000 2014 1 1 1 3 1 1 1 41638 53.2857 1369.0000 NULL NULL 114.0000 75278
Code sql : 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 REQUÊTE DE MISE A JOUR DES RANGS ******************************** -- maj du rang des années UPDATE T_PLN_JOUR_PJR SET PJR_RANG_AN = CAST( (CAST(PAN_ID AS FLOAT) - 1899.0) + (CAST(PJR_RANG_JOUR AS FLOAT) - (SELECT CAST(PJR2.PJR_RANG_JOUR AS FLOAT) FROM T_PLN_JOUR_PJR PJR2 WHERE PJR2.PJM_ID = 1 AND PJR2.PMS_ID = 1 AND PJR2.PAN_ID = PJR.PAN_ID +1)) / (SELECT CAST(COUNT(*) AS FLOAT) FROM T_PLN_JOUR_PJR PJR3 WHERE PJR3.PAN_ID = PJR.PAN_ID) AS DECIMAL(10,4)) FROM T_PLN_JOUR_PJR PJR -- maj du rang des mois UPDATE T_PLN_JOUR_PJR SET PJR_RANG_MOIS = CAST( (CAST(PAN_ID AS FLOAT) - 1900.0) * 12 + PMS_ID + 1 + (CAST(PJR_RANG_JOUR AS FLOAT) - (SELECT CAST(PJR2.PJR_RANG_JOUR AS FLOAT) FROM T_PLN_JOUR_PJR PJR2 WHERE PJR2.PJM_ID = 1 AND PJR2.PMS_ID = (PJR.PMS_ID % 12) + 1 AND PJR2.PAN_ID = CASE WHEN PJR.PMS_ID + 1 = 13 THEN PJR.PAN_ID +1 ELSE PJR.PAN_ID END)) / (SELECT CAST(COUNT(*) AS FLOAT) FROM T_PLN_JOUR_PJR PJR3 WHERE PJR3.PMS_ID = PJR.PMS_ID AND PJR3.PAN_ID = PJR.PAN_ID) AS DECIMAL(10,4)) FROM T_PLN_JOUR_PJR PJR -- maj du rang des semaines UPDATE T_PLN_JOUR_PJR SET PJR_RANG_SEMAINE = CAST( CAST(PSM_ID AS FLOAT) + 51 + (SELECT SUM(MAX_PSM_ID) FROM (SELECT MAX(PSM_ID) AS MAX_PSM_ID FROM T_PLN_JOUR_PJR WHERE PAN_ID < PJR.PAN_ID GROUP BY PAN_ID) T ) + (CAST(PJS_ID AS FLOAT) - 1) / 7 ) AS DECIMAL(10,4)) FROM T_PLN_JOUR_PJR PJR -- maj du rang des trimestres UPDATE T_PLN_JOUR_PJR SET PJR_RANG_TRIMESTRE = CAST((CAST(PAN_ID AS FLOAT) - 1900) * 4 + PTR_ID -- + nombre de jours écoulé + (CAST((SELECT COUNT(*) FROM T_PLN_JOUR_PJR PJR2 WHERE PJR2.PTR_ID = PJR.PTR_ID AND PJR2.PAN_ID = PJR.PAN_ID AND PJR2.PJR_DATE <= PJR.PJR_DATE) AS FLOAT) - 1) -- divisé par le total de jours / (CAST((SELECT COUNT(*) FROM T_PLN_JOUR_PJR PJR3 WHERE PJR3.PTR_ID = PJR.PTR_ID AND PJR3.PAN_ID = PJR.PAN_ID) AS FLOAT)) AS DECIMAL(10,4)) FROM T_PLN_JOUR_PJR PJR -- maj du rang des semestres UPDATE T_PLN_JOUR_PJR SET PJR_RANG_SEMESTRE = CAST((CAST(PAN_ID AS FLOAT) - 1900) * 2 + PST_ID -- + nombre de jours écoulé + (CAST((SELECT COUNT(*) FROM T_PLN_JOUR_PJR PJR2 WHERE PJR2.PST_ID = PJR.PST_ID AND PJR2.PAN_ID = PJR.PAN_ID AND PJR2.PJR_DATE <= PJR.PJR_DATE) AS FLOAT) - 1) -- divisé par le total de jours / (CAST((SELECT COUNT(*) FROM T_PLN_JOUR_PJR PJR3 WHERE PJR3.PST_ID = PJR.PST_ID AND PJR3.PAN_ID = PJR.PAN_ID) AS FLOAT)) AS DECIMAL(10,4)) FROM T_PLN_JOUR_PJR PJR
Merci d'avance de votre aide !
Partager