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 |
Partager