Není třeba se vyhýbat analytickým funkcím, pokud je vaše databáze podporuje, např. ROW_NUMBER()
SELECT
ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
FROM
[<TABLE_NAME>]
Syntaxe je Func([ arguments ]) OVER (analytic_clause)
musíte se zaměřit na OVER (). Tato poslední závorka vytvoří oddíl(y) z vašich řádků a aplikuje Func() na tyto oddíly jeden po druhém. Ve výše uvedeném kódu máme pouze jednu sadu/oddíl řádků. Vygenerovaná sekvence je tedy pro všechny řádky.
Můžete vytvořit více sad dat a vygenerovat pořadové číslo pro každou z nich najednou. Například pokud potřebujete vygenerovat pořadové číslo pro všechny sady řádků, které mají stejné categoryId. Stačí přidat Partition By
klauzule podobná této (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>])
.
Pamatujte, že za FROM
můžete také použít další extra ORDER BY
jinak třídit data. Nemá to však žádný vliv na OVER ()