sql >> Databasteknik >  >> RDS >> Sqlserver

Hur genererar man sekventiellt radnummer i tsql?

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



  1. Distribuera SQL Server AlwaysOn Availability Groups på Linux

  2. Problem med RewriteMap MapType dbd

  3. Räknar rader för alla tabeller samtidigt

  4. Kombinera (Slå samman) två kolumner från två tabeller i en SQL-fråga