Les fonctions de fenêtrage
de SQL Server nous permettent de partitionner et/ou d'ordonnancer les
données de notre résultat pour en calculer une valeur qui sera
utile à notre traitement. L'utilisation la plus connue est la
fonction ROW_NUMBER() qui nous retourne un numéro de ligne, ou la
position en fonction de l'utilisation qu'on en fait, selon
l'ordonnancement spécifié et du partitionnement choisi.
Prenons par exemple, les
dix premier BusinessEntityID la table Person.Person de la base de
données AdventuresWorks.
On peut obtenir le numéro
de ligne, ou la position, selon l'ordre alphabétique du prénom
suivi du nom de famille.
On remarquera que l'ordre
du résultat a changé. Comme on n'a pas spécifié de clause ORDER
BY, le résultat est ordonnancé selon le moteur interne du SGBD.
Pour ordonnancer le résultat selon l'ordre original, il faut
utiliser la clause ORDER BY tel que nous la connaissons.
Nous avons donc maintenant
le numéro de ligne ordonnancer par le prénom et le nom, le tout
ordonnancer par le champ BusinessEntityID.
Compliquons un peu les
choses. Nous désirons toujours obtenir le numéro de ligne
ordonnancer par le prénom et le nom de famille, mais nous aimerions
que les numéros recommencent à zéro lorsque la première lettre du
prénom change. Pour cela, il faut partitionner les données selon la
première lettre du prénom. À chaque changement de première lettre du prénom, le numéro retourner par la fonction ROW_NUMBER recommencera à 1, comme on peut le voir dans le résultat suivant.
Ces fonctions peuvent être
à la fois dans la clause SELECT, ainsi que dans la clause WHERE.
C'est ce que les fonctions
de fenêtrage nous permettent de faire,
calculer une valeur sur une partition de données, qui peut être
l'ensemble des données ou non, ordonnancée ou non, une fois que les critères de
filtre de la clause WHERE ont été appliqués.
Dans le prochain post, on
verra quelles fonctions, autre que ROW_NUMBER, peuvent être
utilisées avec la clause OVER et quelles sont les autres fonctions
qui en sont affectées.
Référence:
Aucun commentaire:
Publier un commentaire