logo

SQL Server Rækkenummer

Rækkenummer er det mest almindelige rangordningsfunktion bruges i SQL Server. Funktionen ROW_NUMBER() genererer et sekventielt nummer for hver række i en partition i det resulterende output. I hver partition begynder nummeret i første række med 1. Vi skal altid bruge BESTIL EFTER klausul for at sikre, at numrene tildeles i den rigtige rækkefølge. Værdierne returneret af denne funktion er af BIG INT datatype. Denne funktion leveres med SQL Server 2005 og senere MS SQL-versioner.

ROW_NUMBER bestemmer midlertidig værdi når forespørgslen udføres. Hvis du vil have tallene i en tabel, skal du se IDENTITET ejendom og SEKVENS . Når ROW_NUMBER-funktionen i SQL Server støder på to identiske værdier i den samme partition, tildeler den forskellige rangnumre til dem. Rangnummeret vil blive bestemt af den rækkefølge, de vises i.

Der er ingen garanti for, at værdien, der returneres af denne funktion, vil blive ordnet den samme for hver udførelse, medmindre følgende er sandt:

  • Opdelte kolonneværdier er unikke
  • ORDER BY kolonneværdier er unikke
  • Kombination af partition og rækkefølge efter kolonner er unikke

Syntaks

Følgende er syntaksen, der illustrerer funktionen ROW_NUMBER():

 ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... ) 

Lad os forstå ROW NUMBER()-funktionens syntaks:

OVER

Det er vigtigt at forstå denne klausul, der specificerer vinduet eller sæt rækker, som vinduesfunktionen betjener. PARTITION BY og ORDER BY er de to mulige klausuler i OVER-klausulen. OVER-sætningens ORDER BY-udtryk understøttes, når rækkerne skal komme i en bestemt rækkefølge for at funktionen kan udføres.

bash for loop

OPDELING AF

  • Det er en valgfri klausul, der opdeler resultatsættet i partitioner (grupper af rækker). Derefter anvendes ROW NUMBER()-funktionen på hver partition og tildeler hver partitions rangnummer separat.
  • Hvis vi udelader partition by-sætningen, vil ROW_NUMBER-funktionen behandle hele resultatet som en enkelt partition og give rangering i top til bund rækkefølge.

BESTIL EFTER

Denne klausul giver os mulighed for at sortere rækkerne i resultatsættet inden for hver partition. Det er en påkrævet klausul, fordi ROW_NUMBER()-funktionen er ordreafhængig.

Eksempel

Lad os forstå, hvordan ROW_NUMBER-funktionen fungerer i SQL Server-tabellen med et eksempel. Først vil vi oprette en tabel med navnet ' Personer ' ved hjælp af nedenstående erklæring:

 CREATE TABLE Persons ( person_name varchar(45) NOT NULL, product varchar(45) DEFAULT NULL, country varchar(25) DEFAULT NULL, price float, years int NOT NULL ); 

Dernæst vil vi tilføje nogle poster i denne tabel ved hjælp af nedenstående erklæring:

 INSERT INTO Persons (person_name, product, country, price, years) VALUES ('Steffen', 'Computer', 'USA', 20000.00, 2018), ('Joseph', 'Laptop', 'India', 35000.00, 2016), ('Kevin', 'TV', 'USA', 15000.00, 2016), ('Thompson', 'Mobile', 'France', 12500.00, 2017), ('Donald', 'Laptop', 'England', 30000.00, 2018), ('Joseph', 'Mobile', 'India', 18000.00, 2018), ('Matthew', 'Desktop', 'France', 22000.00, 2017), ('Antonio', 'Mouse', 'England', 1200.00, 2016); 

Derefter skal du kontrollere dataene ved hjælp af VÆLG udmelding. Vi får nedenstående output:

SQL Server Rækkenummer

1. Simpelt ROW_NUMBER() eksempel

Følgende udtalelse viser personens detaljer og tilføjer et sekventielt heltal til hver række ved at bruge ROW_NUMBER():

 SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons; 

Her har vi ikke specificeret PARTITION BY-sætningen, så ROW_NUMBER()-funktionen vil behandle hele resultatsættet som en enkelt partition. Efter udførelse af sætningen vil vi få følgende output:

SQL Server Rækkenummer

2. ROW_NUMBER() over partitionseksempel

streng til tegn java

Funktionen ROW NUMBER() bruges i dette eksempel, og giver et sekventielt nummer til hver post i en partition i en tabel. Den geninitialiserede altid rækkenummeret, når året ændres:

 SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons; 

Her har vi brugt PARTITION BY-sætningen, der deler 'Personer' tabel i partitioner baseret på 'flere år' kolonne. Efter udførelse får vi nedenstående output:

SQL Server Rækkenummer

3. ROW_NUMBER() Eksempel på sideinddeling

Vi kan også bruge funktionen ROW_NUMBER() til paginering. For eksempel , hvis vi ønsker at få alle en persons oplysninger i en applikation efter sider, tildeler vi først hver række et fortløbende nummer ved hjælp af ROW_NUMBER()-funktionen. For det andet skal du sortere rækkerne efter den ønskede side.

Følgende erklæring forklarer det mere tydeligt:

 SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num &gt; 3 AND row_num <= 6; < pre> <p>It will give the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-4.webp" alt="SQL Server Row Number"> <p>If we do not want to use the <strong>subquery</strong> , we can use the <strong>common table expression (CTE)</strong> as below statement:</p> <pre> WITH CTE_Person AS ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) SELECT * FROM CTE_Person WHERE row_num &gt; 3 AND row_num <= 6; < pre> <p>In this example, we have first specified the CTE that uses the ROW_NUMBER() function to assign each row in the result set sequentially. Second, the outer query returned the desired result. After execution, we will get the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-5.webp" alt="SQL Server Row Number"> <h3>Conclusion</h3> <p>In this article, we learned how to give a sequential number to each record within a partition of a query using the ROW NUMBER() function in SQL Server.</p> <hr></=></pre></=>