Il n'est pas nécessaire d'éviter les fonctions analytiques si votre base de données les prend en charge, par exemple ROW_NUMBER()
SELECT
ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
FROM
[<TABLE_NAME>]
La syntaxe est Func([ arguments ]) OVER (analytic_clause)
vous devez vous concentrer sur OVER (). Ces dernières parenthèses font partition(s) de vos lignes et appliquent le Func() sur ces partitions une par une. Dans le code ci-dessus, nous n'avons qu'un seul ensemble/partition de lignes. Par conséquent, la séquence générée est pour toutes les lignes.
Vous pouvez créer plusieurs ensembles de données et générer un numéro de séquence pour chacun en une seule fois. Par exemple, si vous avez besoin de générer un numéro de séquence pour tout l'ensemble de lignes, celles-ci ont le même identifiant de catégorie. Il vous suffit d'ajouter Partition By
clause comme celle-ci (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>])
.
N'oubliez pas qu'après FROM
vous pouvez également utiliser un autre ORDER BY
supplémentaire pour trier vos données différemment. Mais cela n'a aucun effet sur le OVER ()