Bonjour,

Considérons la table suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
DECLARE @t TABLE
(
	ID INT,
	indice TINYINT
)
 
INSERT INTO @t VALUES (7636, 9)
INSERT INTO @t VALUES (7636, 10)
INSERT INTO @t VALUES (7636, 11)
INSERT INTO @t VALUES (7636, 14)
Je cherche à obtenir le résultat suivant

7636 8 12
7636 13 15

J'ai commencé à écrire la requête suivante :

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
;WITH
	CTE_INDICES AS
	(
			SELECT ID,
				MIN(indice) - 1 AS nIndiceMin,
				MAX(indice) + 1 AS nIndiceMax
		FROM @t
		GROUP BY ID
	),
	CTE_PLAGES_COMPLETES AS
	(
			SELECT ID,
					nIndiceMin,
					nIndiceMax
			FROM CTE_INDICES
		UNION ALL
			SELECT PC.ID,
					PC.nIndiceMin + 1,
					PC.nIndiceMax
			FROM CTE_PLAGES_COMPLETES AS PC
			JOIN CTE_INDICES AS I
				ON PC.ID = I.ID
				AND PC.nIndiceMin < I.nIndiceMax
	),
	CTE_FINAL AS
	(
		SELECT PC.ID,
				PC.nIndiceMin,
				T.indice
		FROM CTE_PLAGES_COMPLETES AS PC
		LEFT JOIN @t AS T
			ON PC.ID = T.ID
			AND PC.nIndiceMin = T.indice
	)
SELECT *
FROM CTE_FINAL
Qui me procure :

ID nIndiceMin indice
7636 8 NULL
7636 9 9
7636 10 10
7636 11 11
7636 12 NULL
7636 13 NULL
7636 14 14
7636 15 NULL

Mais je ne vois pas comment obtenir ce que je recherche ...

Pourriez-vous m'aider ?

@++