Der er ingen grund til at undgå analytiske funktioner, hvis din database understøtter dem, f.eks. ROW_NUMBER()
SELECT
ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
FROM
[<TABLE_NAME>]
Syntaksen er Func([ arguments ]) OVER (analytic_clause)
du skal fokusere på OVER (). Denne sidste parentes laver partition(er) af dine rækker og anvender Func() på disse partitioner én efter én. I ovenstående kode har vi kun enkelt sæt/partition af rækker. Derfor er den genererede sekvens for alle rækkerne.
Du kan lave flere sæt af dine data og generere sekvensnummer for hver enkelt på én gang. For eksempel, hvis du skal generere sekvensnummer for alle sæt rækker, har de samme kategori-id. Du skal blot tilføje Partition By
klausul som denne (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>])
.
Husk det efter FROM
du kan også bruge en anden ekstra ORDER BY
at sortere dine data anderledes. Men det har ingen effekt på OVER ()