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
|
--DROP TABLE testg
-- création jeu de test
CREATE TABLE testg
(
annee int,
mois int,
region int,
clientcde varchar(50)
)
INSERT INTO testg VALUES (2012, 2, 1, 'CLI1')
INSERT INTO testg VALUES (2012, 4, 1, 'CLI1')
INSERT INTO testg VALUES (2012, 7, 1, 'CLI1')
INSERT INTO testg VALUES (2012, 8, 1, 'CLI1')
INSERT INTO testg VALUES (2012, 5, 2, 'CLI2')
INSERT INTO testg VALUES (2012, 6, 2, 'CLI2')
--création table pour stocker résultats intermédiaires
DECLARE @result TABLE
(
annee int,
mois int,
region int,
clientcde varchar(50)
)
DECLARE @annee int
DECLARE @mois int
DECLARE @region int
DECLARE @clientcde varchar(50)
DECLARE Q1 SCROLL CURSOR FOR
-- on commence par récupérer tous les clients, par région et par mois
SELECT
DISTINCT
clientcde,
annee,
mois,
region
FROM
testg
WHERE
annee >= 2011
OPEN Q1
FETCH NEXT FROM Q1 INTO @clientcde, @annee, @mois, @region
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- pour chaque client, pour une région et un mois donné, on regarde si il existe dans la table testg dans les deux mois précédents
IF @clientcde IN (SELECT DISTINCT clientcde FROM testg WHERE annee = 2012 AND mois BETWEEN @mois -2 AND @mois -1)
BEGIN
-- si oui on le fait apparaitre dans la table résultat
INSERT INTO @result values (@annee, @mois, @region, @clientcde)
END
FETCH NEXT FROM Q1 INTO @clientcde, @annee, @mois, @region
END
CLOSE Q1
DEALLOCATE Q1
select region, mois, count(clientcde) from @result group by region, mois order by region, mois |
Partager