Številka vrstice je najpogostejša funkcijo razvrščanja uporablja v SQL Server. Funkcija ROW_NUMBER(). ustvari zaporedno številko za vsako vrstico znotraj particije v rezultatu. V vsaki particiji se številka prve vrstice začne z 1. Vedno moramo uporabiti NAROČI PO klavzulo, da zagotovite, da so številke dodeljene v pravilnem zaporedju. Vrednosti, ki jih vrne ta funkcija, so VELIKA INT tip podatkov. Ta funkcija je priložena SQL Server 2005 in novejšim različicam MS SQL.
ROW_NUMBER določa začasna vrednost ko je poizvedba izvedena. Če želite dobiti številke v tabeli, morate videti IDENTITETA premoženje in ZAPOREDJE . Ko funkcija ROW_NUMBER v strežniku SQL Server naleti na dve enaki vrednosti v isti particiji, jima dodeli različni številki ranga. Številka ranga bo določena glede na vrstni red, v katerem so prikazani.
Nobenega zagotovila ni, da bo vrednost, ki jo vrne ta funkcija, urejena enako za vsako izvedbo, razen če velja naslednje:
hitro razvrščanje java
- Vrednosti razdeljenih stolpcev so edinstvene
- Vrednosti stolpcev ORDER BY so edinstvene
- Kombinacija stolpcev particije in vrstnega reda po je edinstvena
Sintaksa
Sledi sintaksa, ki ponazarja funkcijo ROW_NUMBER():
ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
Razumejmo sintakso funkcije ROW NUMBER():
KONEC
Pomembno je razumeti to klavzulo, ki določa okno ali niz vrstic, ki jih upravlja funkcija okna. PARTITION BY in ORDER BY sta dve možni klavzuli klavzule OVER. Izraz ORDER BY klavzule OVER je podprt, ko morajo biti vrstice v določenem vrstnem redu, da se funkcija lahko izvrši.
RAZDELITEV PO
- To je neobvezna klavzula, ki razdeli nabor rezultatov na particije (skupine vrstic). Nato se funkcija ROW NUMBER() uporabi za vsako particijo in vsaki particiji dodeli številko ranga posebej.
- Če izpustimo klavzulo o razdelitvi, bo funkcija ROW_NUMBER obravnavala celoten rezultat kot eno particijo in zagotovila razvrstitev v vrstnem redu od zgoraj navzdol.
NAROČI PO
zamenjava niza v Javi
Ta člen nam omogoča razvrščanje vrstic nabora rezultatov znotraj vsake particije. To je obvezna klavzula, ker je funkcija ROW_NUMBER() odvisna od vrstnega reda.
Primer
Naj s primerom razumemo, kako deluje funkcija ROW_NUMBER v tabeli strežnika SQL Server. Najprej bomo ustvarili tabelo z imenom ' Osebe ' z uporabo spodnje izjave:
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 );
Nato bomo v to tabelo dodali nekaj zapisov z uporabo spodnje izjave:
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);
Nato preverite podatke z uporabo IZBERI izjava. Dobili bomo spodnji rezultat:
1. Preprost primer ROW_NUMBER().
Naslednja izjava prikaže podrobnosti o osebi in doda zaporedno celo število v vsako vrstico z uporabo ROW_NUMBER():
SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons;
Tukaj nismo določili klavzule PARTITION BY, tako da bo funkcija ROW_NUMBER() obravnavala celoten nabor rezultatov kot eno samo particijo. Po izvedbi stavka bomo dobili naslednji rezultat:
2. ROW_NUMBER() nad primerom particij
Funkcija ROW NUMBER(), uporabljena v tem primeru, zagotavlja zaporedno številko za vsak zapis znotraj particije v tabeli. Vedno znova inicializira številko vrstice, ko se spremeni leto:
SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons;
Tukaj smo uporabili klavzulo PARTITION BY, ki deli 'osebe' tabelo na particije na podlagi 'leta' stolpec. Po izvedbi bomo dobili spodnji rezultat:
3. ROW_NUMBER() Primer za paginacijo
naključno število med 1 in 10
Za ostranjevanje lahko uporabimo tudi funkcijo ROW_NUMBER(). Na primer , če želimo pridobiti vse podatke o osebi v aplikaciji po straneh, bomo vsaki vrstici najprej dodelili zaporedno številko s funkcijo ROW_NUMBER(). Drugič, razvrstite vrstice po zahtevani strani.
Naslednja izjava to pojasnjuje bolj jasno:
SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num > 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 > 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></=>=>