[T-SQL] Update par ordre croissant
Bonjour,
j'ai réalisé un code qui répond à ma demande mais dont je ne saurais expliquer le fonctionnement (:aie:)
Jeu de données :
Code:
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 |
Requête :
Code:
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 |
En fait, elle met dans le champ rang, un genre d'ID permettant de trier le champ val par ordre croissant.
Ma question se porte essentiellement sur le HAVING...
Bref, quelqu'un saurait m'expliquer pourquoi et comment ce code fonctionne?
:merci: