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
|
DECLARE @PALIER AS TABLE
(
CODE VARCHAR(2),
LIBELLE VARCHAR(10),
DT_OUVR SMALLDATETIME,
DT_FERM SMALLDATETIME
);
INSERT INTO @PALIER
SELECT '01', 'lib012007' , CAST('01/01/2007' AS SMALLDATETIME), CAST(NULL AS SMALLDATETIME) UNION ALL
SELECT '01', 'lib012007b', CAST('01/05/2007' AS SMALLDATETIME), CAST(NULL AS SMALLDATETIME) UNION ALL
SELECT '01', 'lib012008' , CAST('01/01/2008' AS SMALLDATETIME), CAST(NULL AS SMALLDATETIME) UNION ALL
SELECT '02', 'Lib2 2007' , CAST('01/01/2007' AS SMALLDATETIME), CAST(NULL AS SMALLDATETIME) UNION ALL
SELECT '02', 'Lib2 2007b', CAST('05/06/2007' AS SMALLDATETIME), CAST(NULL AS SMALLDATETIME) UNION ALL
SELECT '03', 'LIB3 2007' , CAST('01/01/2007' AS SMALLDATETIME), CAST(NULL AS SMALLDATETIME) UNION ALL
SELECT '04', 'LIB3 2007' , CAST('01/01/2007' AS SMALLDATETIME), CAST('15/03/2008' AS SMALLDATETIME)
;
UPDATE @PALIER
SET DT_FERM = p6.DT_OUVR
FROM @PALIER p0
INNER JOIN
(
SELECT p.CODE, P.LIBELLE, P5.DT_OUVR
FROM
(
SELECT
(SELECT COUNT(*) FROM @PALIER p2
WHERE p2.CODE <= p1.CODE AND p2.LIBELLE <= p1.LIBELLE) AS number,
p1.*
FROM @PALIER p1
) p
INNER JOIN (SELECT
(SELECT COUNT(*)
FROM @PALIER p4
WHERE p4.CODE <= p3.CODE AND p4.LIBELLE <= p3.LIBELLE) AS number,
p3.*
FROM @PALIER p3) p5
ON p.number = p5.number - 1
AND p.CODE = p5.CODE
) p6
ON p0.CODE = p6.CODE
AND p0.LIBELLE = p6.LIBELLE
SELECT * FROM @PALIER; |
Partager