Bonjour à tous,

Je suis débutant donc pardonnez moi si le problème vous semble simple à résoudre.

J'ai créé une procédure stockée (avec curseur) me permettant de retourner, par client:
- le nombre de jours de livraison par semaine.
- le nombre de jours ouvrés par semaine.
- le nombre de jours "successifs" de livraison.

J'ai retourné le code dans tous les sens mais je n'arrive pas à finaliser mon projet.

Les résultats retournés correspondent à ce que je veux mais lorsque j'exécute la procédure stockée, cette dernière ne s'arrête 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
 
USE MaBase
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Vérification de la présence de la table dans la base de données et suppression dans l'affirmative
IF OBJECT_ID('[MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON]', 'U') IS NOT NULL
	DROP TABLE [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON]
GO
 
-- Création de la table servant à contenir les résultats finaux
CREATE TABLE [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON](
	[Depot] [char](2) NOT NULL,	
	[Semaine] INTEGER NOT NULL,	
	[Code_Client] [float] NOT NULL,
	[Nb_Jours_Livres] INTEGER NOT NULL,
	[Nb_Jours_Semaine] INTEGER NOT NULL,
	[Nb_jours_consecutifs] INTEGER NOT NULL,
	[Annee] INTEGER NOT NULL
)
GO
 
CREATE PROCEDURE [dbo].[sp_frequence_livraison]
AS 
BEGIN 
 
DECLARE @Semaine_encours INT, @Depot_encours CHAR(2), @Client_encours FLOAT, @Date_Liv_encours DATETIME 
DECLARE @Semaine_suivante INT, @Depot_suivant CHAR(2), @Client_suivant FLOAT, @Date_Liv_suivante DATETIME 
DECLARE @NbJoursLivres INT, @NbJoursOuvres INT, @NbJoursConsecutifs INT
DECLARE @Test_passage char(1)
 
DECLARE MyCursor CURSOR 
FOR SELECT DISTINCT Depot, Semaine, Code_Client, Date
	FROM	[MaBase].dbo.LOG_Stats_articles_DI_avec_ITM_Gary
	GROUP BY Depot, Semaine, Code_Client, Date
	ORDER BY Depot, Semaine, Code_Client, Date
 
-- Ouverture du curseur
OPEN MyCursor
 
-- Lecture du 1er enregistrement
FETCH NEXT FROM MyCursor INTO @Depot_encours, @Semaine_encours, @Client_encours, @Date_Liv_encours
-- Lecture du 2ème enregistrement
FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
 
-- Boucle sur le curseur
WHILE (@@fetch_Status <> -1)
BEGIN
 
	-- Boucle sur DEPOTS
	WHILE (@Depot_encours = @Depot_suivant)
	BEGIN
 
		SET @NbJoursOuvres = (SELECT Nb_Jours_Ouvres FROM JOURS_OUVRES WHERE (Semaine = @Semaine_encours) AND (Annee = DATEPART(year, @Date_Liv_encours)))
 
		-- Boucle sur SEMAINES
		WHILE (@Semaine_encours = @Semaine_suivante)
		BEGIN
 
			SET @NbJoursLivres = 1
			SET @NbJoursConsecutifs = 0	
			SET @Test_passage = 'N'
 
			-- Boucle sur CLIENTS
			WHILE (@Client_encours = @Client_suivant)
			BEGIN
 
				SET @NbJoursLivres = @NbJoursLivres + 1
 
					IF (DATEADD(day, 1, @Date_Liv_encours) = @Date_Liv_suivante)
					BEGIN	
 
						IF @Test_passage = 'N'
						BEGIN
							SET @Test_passage = 'O'
							SET @NbJoursConsecutifs = @NbJoursConsecutifs + 2
						END
						ELSE
						BEGIN 
							SET @NbJoursConsecutifs = @NbJoursConsecutifs + 1
						END
 
					END
					ELSE
					BEGIN
						SET @Test_passage = 'N'
					END
 
				-- On copie les données contenues dans les variables "suivantes" dans les variables "encours"
				SET @Depot_encours = @Depot_suivant
				SET @Semaine_encours = @Semaine_suivante
				SET @Client_encours = @Client_suivant 
				SET @Date_Liv_encours = @Date_Liv_suivante
 
				-- On passe au client suivant
				FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
			END
 
			-- On insert les données dans la Table
			INSERT INTO [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON](Depot, Semaine, Code_Client, Nb_Jours_Livres, Nb_jours_consecutifs, Nb_Jours_Semaine, Annee)
			(SELECT @Depot_encours, @Semaine_encours, @Client_encours, @NbJoursLivres, @NbJoursConsecutifs, @NbJoursOuvres, DATEPART(year, @Date_Liv_encours))
 
			-- Next
			SET @Depot_encours = @Depot_suivant
			SET @Semaine_encours = @Semaine_suivante
			SET @Client_encours = @Client_suivant 
			SET @Date_Liv_encours = @Date_Liv_suivante
 
			FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
		END
 
		INSERT INTO [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON](Depot, Semaine, Code_Client, Nb_Jours_Livres, Nb_jours_consecutifs, Nb_Jours_Semaine, Annee)
		(SELECT @Depot_encours, @Semaine_encours, @Client_encours, @NbJoursLivres, @NbJoursConsecutifs, @NbJoursOuvres, DATEPART(year, @Date_Liv_encours))
 
		-- Next
		SET @Depot_encours = @Depot_suivant
		SET @Semaine_encours = @Semaine_suivante
		SET @Client_encours = @Client_suivant 
		SET @Date_Liv_encours = @Date_Liv_suivante
 
		FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
	END
 
	INSERT INTO [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON](Depot, Semaine, Code_Client, Nb_Jours_Livres, Nb_jours_consecutifs, Nb_Jours_Semaine, Annee)
	(SELECT @Depot_encours, @Semaine_encours, @Client_encours, @NbJoursLivres, @NbJoursConsecutifs, @NbJoursOuvres, DATEPART(year, @Date_Liv_encours))
 
	-- Next
	SET @Depot_encours = @Depot_suivant
	SET @Semaine_encours = @Semaine_suivante
	SET @Client_encours = @Client_suivant 
	SET @Date_Liv_encours = @Date_Liv_suivante
 
	FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
END
 
CLOSE myCursor
DEALLOCATE myCursor
 
END
GO

Merci pour votre aide.