Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come generare il numero di riga sequenziale in tsql?

Non è necessario evitare le funzioni analitiche se il database le supporta, ad esempio ROW_NUMBER()

    SELECT
        ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
    FROM
        [<TABLE_NAME>]

La sintassi è Func([ arguments ]) OVER (analytic_clause) devi concentrarti su OVER(). Queste ultime parentesi creano partizioni delle tue righe e applicano Func() su queste partizioni una per una. Nel codice sopra abbiamo solo un singolo set/partizione di righe. Pertanto la sequenza generata è per tutte le righe.

Puoi creare più set di dati e generare un numero di sequenza per ognuno in una volta sola. Ad esempio, se hai bisogno di generare un numero di sequenza per tutto l'insieme di righe, quelle hanno lo stesso categoryId. Devi solo aggiungere Partition By clausola come questa (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) .

Ricordalo dopo FROM puoi anche usare un altro ORDER BY extra per ordinare i tuoi dati in modo diverso. Ma non ha alcun effetto su OVER()