sql >> Databáze >  >> RDS >> Sqlserver

Jak vygenerovat sekvenční číslo řádku v tsql?

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



  1. Návrh databáze pro hru pro více hráčů/jednoho kvízu

  2. MySQL DATEDIFF() vs TIMESTAMPDIFF():Jaký je rozdíl?

  3. Jaký je nejlepší postup pro ukládání vlastních dat pro Wordpress

  4. 6 důvodů, proč může Microsoft Access pomoci vaší firmě