sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan genereres sekventielt rækkenummer i tsql?

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



  1. Oracle - literal matcher ikke formatstrengfejl

  2. Henter alle børn og underbørn fra moderselskabet JPA

  3. Returner alle deaktiverede begrænsninger i SQL Server (T-SQL-eksempel)

  4. Dvale, hvordan man modellerer dette forhold