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