Det finns ingen anledning att undvika analytiska funktioner om din databas stöder dem, t.ex. ROW_NUMBER()
SELECT
ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
FROM
[<TABLE_NAME>]
Syntaxen är Func([ arguments ]) OVER (analytic_clause)
du måste fokusera på ÖVER (). Den sista parentesen skapar partition(er) av dina rader och tillämpar Func() på dessa partitioner en efter en. I ovanstående kod har vi bara en enda uppsättning/partition av rader. Därför är den genererade sekvensen för alla rader.
Du kan skapa flera uppsättningar av dina data och generera sekvensnummer för var och en på en gång. Till exempel om du behöver generera sekvensnummer för alla rader som har samma kategori-Id. Du behöver bara lägga till Partition By
sats som denna (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>])
.
Kom ihåg att efter FROM
du kan också använda en annan extra ORDER BY
att sortera dina data annorlunda. Men det har ingen effekt på OVER ()