Bonjour,
Considérons la table suivante :
Je cherche à obtenir le résultat suivant
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)
7636 8 12
7636 13 15
J'ai commencé à écrire la requête suivante :
Qui me procure :
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
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 ?
@++![]()
Partager