Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment générer un numéro de ligne séquentiel dans tsql ?

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 ()