sql >> Database >  >> RDS >> Sqlserver

Hoe sequentieel rijnummer in tsql te genereren?

Het is niet nodig om analytische functies te vermijden als uw database ze ondersteunt, bijvoorbeeld ROW_NUMBER()

    SELECT
        ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
    FROM
        [<TABLE_NAME>]

De syntaxis is Func([ arguments ]) OVER (analytic_clause) je moet je concentreren op OVER (). Deze laatste haakjes maken partitie(s) van je rijen en passen de Func() één voor één op deze partities toe. In bovenstaande code hebben we alleen een enkele set / partitie van rijen. Daarom is de gegenereerde reeks voor alle rijen.

U kunt meerdere sets van uw gegevens maken en voor elk daarvan in één keer een volgnummer genereren. Als u bijvoorbeeld een volgnummer moet genereren voor alle rijen die dezelfde categorie-id hebben. Je hoeft alleen maar Partition By toe te voegen clausule zoals deze (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) .

Onthoud dat na FROM je kunt ook nog een extra ORDER BY . gebruiken om uw gegevens anders te sorteren. Maar het heeft geen effect op de OVER ()



  1. Converteer maandnaam naar maandnummer in PostgreSQL

  2. MySQL-implementatie van ray-casting-algoritme?

  3. PostgreSQL MAX en GROUP BY

  4. Splits een groot tekst-/CSV-bestand in meerdere bestanden in PL SQL