Bonjour,
j'ai réalisé un code qui répond à ma demande mais dont je ne saurais expliquer le fonctionnement ()
Jeu de données :
Requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 create table #ordre (val int, rang int null) insert #ordre (val) select 1 union select 10 union select 9 union select 7 union select 11 union select 21 union select 25 union select 3 union select 20
En fait, elle met dans le champ rang, un genre d'ID permettant de trier le champ val par ordre croissant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 declare @i int , @maxi int select @i = max(val) from #ordre select @maxi = @i UPDATE #ordre set rang = (select @i - @maxi FROM #ordre o1 WHERE #ordre.val = o1.val HAVING max(o1.val) < @i), @i = @i + 1 SELECT * from #ordre order by rang
Ma question se porte essentiellement sur le HAVING...
Bref, quelqu'un saurait m'expliquer pourquoi et comment ce code fonctionne?
Partager