logo

SQL Server radnummer

Radnummer er det vanligste rangeringsfunksjon brukes i SQL Server. ROW_NUMBER()-funksjonen genererer et sekvensielt nummer for hver rad i en partisjon i den resulterende utgangen. I hver partisjon begynner nummeret på første rad med 1. Vi må alltid bruke REKKEFØLGE ETTER klausul for å sikre at numrene tildeles i riktig rekkefølge. Verdiene som returneres av denne funksjonen er av BIG INT data-type. Denne funksjonen kommer med SQL Server 2005 og senere MS SQL-versjoner.

ROW_NUMBER bestemmer midlertidig verdi når spørringen utføres. Hvis du ønsker å få tallene i en tabell, må du se IDENTITET eiendom og SEKVENS . Når ROW_NUMBER-funksjonen i SQL Server møter to identiske verdier i samme partisjon, tildeler den forskjellige rangeringsnumre til dem. Rangeringsnummeret vil bli bestemt av rekkefølgen de vises i.

Det er ingen garanti for at verdien som returneres av denne funksjonen vil bli ordnet den samme for hver kjøring med mindre følgende er sant:

  • Verdiene for partisjonerte kolonner er unike
  • ORDER BY-kolonneverdier er unike
  • Kombinasjon av partisjon og rekkefølge etter kolonner er unike

Syntaks

Følgende er syntaksen som illustrerer ROW_NUMBER()-funksjonen:

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

La oss forstå ROW NUMBER()-funksjonens syntaks:

OVER

Det er viktig å forstå denne klausulen som spesifiserer vinduet eller settet med rader som vindusfunksjonen opererer. PARTITION BY og ORDER BY er de to mulige klausulene i OVER-klausulen. OVER-klausulens ORDER BY-uttrykk støttes når radene må komme i en bestemt rekkefølge for at funksjonen skal utføres.

bash for loop

DELING AV

  • Det er en valgfri klausul som deler opp resultatsettet i partisjoner (grupper av rader). Deretter brukes ROW NUMBER()-funksjonen på hver partisjon og tildeler hver partisjons rangeringsnummer separat.
  • Hvis vi utelater partisjon etter klausul, vil ROW_NUMBER-funksjonen behandle hele resultatet som en enkelt partisjon og gi rangering i topp til bunn rekkefølge.

REKKEFØLGE ETTER

Denne klausulen lar oss sortere radene i resultatsettet i hver partisjon. Det er en obligatorisk klausul fordi ROW_NUMBER()-funksjonen er rekkefølgeavhengig.

Eksempel

La oss forstå hvordan ROW_NUMBER-funksjonen fungerer i SQL Server-tabellen med et eksempel. Først vil vi lage en tabell som heter ' Personer ' ved å bruke utsagnet nedenfor:

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

Deretter vil vi legge til noen poster i denne tabellen ved å bruke setningen nedenfor:

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

Deretter bekrefter du dataene ved å bruke PLUKKE UT uttalelse. Vi vil få utgangen nedenfor:

SQL Server radnummer

1. Enkelt ROW_NUMBER() eksempel

Følgende uttalelse viser personens detaljer og legger til et sekvensielt heltall til hver rad ved å bruke ROW_NUMBER():

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

Her har vi ikke spesifisert PARTITION BY-leddet slik at ROW_NUMBER()-funksjonen vil behandle hele resultatsettet som en enkelt partisjon. Etter utførelse av setningen vil vi få følgende utgang:

SQL Server radnummer

2. ROW_NUMBER() over partisjoner Eksempel

streng til tegn java

ROW NUMBER()-funksjonen brukes i dette eksemplet gir et sekvensielt nummer til hver post i en partisjon i en tabell. Den initialiserte alltid radnummeret på nytt når året endres:

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

Her har vi brukt PARTITION BY-klausulen som deler 'Personer' tabellen i partisjoner basert på 'år' kolonne. Etter utførelse vil vi få følgende utgang:

SQL Server radnummer

3. ROW_NUMBER() Eksempel for paginering

Vi kan også bruke funksjonen ROW_NUMBER() for paginering. For eksempel , hvis vi ønsker å få all informasjon om en person i en applikasjon etter sider, tilordner vi først hver rad et sekvensnummer ved å bruke funksjonen ROW_NUMBER(). For det andre, sorter radene etter den forespurte siden.

Følgende uttalelse forklarer det tydeligere:

 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></=>