Radnummer är det vanligaste rankningsfunktion används i SQL Server. Funktionen ROW_NUMBER() genererar ett sekventiellt nummer för varje rad inom en partition i den resulterande utmatningen. I varje partition börjar första radens nummer med 1. Vi måste alltid använda SORTERA EFTER för att säkerställa att numren tilldelas i rätt ordning. Värdena som returneras av denna funktion är av BIG INT data typ. Denna funktion kommer med SQL Server 2005 och senare MS SQL-versioner.
ROW_NUMBER bestämmer tillfälligt värde när frågan exekveras. Om du vill få siffrorna i en tabell måste du se IDENTITET egendom och SEKVENS . När funktionen ROW_NUMBER i SQL Server stöter på två identiska värden i samma partition, tilldelar den olika rangnummer till dem. Rangnumret bestäms av den ordning i vilken de visas.
Det finns ingen garanti för att värdet som returneras av den här funktionen kommer att ordnas på samma sätt för varje körning om inte följande är sant:
- Värden för partitionerade kolumner är unika
- ORDER BY kolumner värden är unika
- Kombinationen av kolumner Partition och Order By är unika
Syntax
Följande är syntaxen som illustrerar funktionen ROW_NUMBER():
ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
Låt oss förstå syntaxen för ROW NUMBER()-funktionen:
ÖVER
Det är viktigt att förstå den här klausulen som specificerar fönstret eller uppsättningen rader som fönsterfunktionen använder. PARTITION BY och ORDER BY är de två möjliga satserna i OVER-satsen. OVER-satsens ORDER BY-uttryck stöds när raderna måste komma i en specifik ordning för att funktionen ska köras.
AVDELNING AV
- Det är en valfri klausul som delar upp resultatuppsättningen i partitioner (grupper av rader). Sedan appliceras funktionen ROW NUMBER() på varje partition och tilldelar varje partitions rangnummer separat.
- Om vi utelämnar partition by-satsen kommer funktionen ROW_NUMBER att behandla hela resultatet som en enda partition och ge rangordning i topp till botten.
SORTERA EFTER
propositionell logik
Denna klausul låter oss sortera raderna i resultatuppsättningen inom varje partition. Det är en obligatorisk klausul eftersom funktionen ROW_NUMBER() är orderberoende.
Exempel
Låt oss förstå hur ROW_NUMBER-funktionen fungerar i SQL Server-tabellen med ett exempel. Först skapar vi en tabell som heter ' Personer ' med hjälp av följande uttalande:
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 );
Därefter kommer vi att lägga till några poster i den här tabellen med hjälp av följande uttalande:
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);
Verifiera sedan data med hjälp av VÄLJ påstående. Vi kommer att få följande utdata:
1. Enkelt ROW_NUMBER() Exempel
Följande uttalande visar personens detaljer och lägger till ett sekventiellt heltal till varje rad genom att använda ROW_NUMBER():
SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons;
Här har vi inte specificerat PARTITION BY-satsen så att funktionen ROW_NUMBER() kommer att behandla hela resultatuppsättningen som en enda partition. Efter exekvering av uttalandet kommer vi att få följande utdata:
2. ROW_NUMBER() över partitioner Exempel
Funktionen ROW NUMBER() används i det här exemplet ger ett sekventiellt nummer till varje post inom en partition i en tabell. Den återinitierade alltid radnumret när året ändras:
SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons;
Här har vi använt PARTITION BY-satsen som delar upp 'Personer' tabell i partitioner baserat på 'år' kolumn. Efter exekvering kommer vi att få följande utdata:
3. ROW_NUMBER() Exempel för paginering
Vi kan också använda funktionen ROW_NUMBER() för paginering. Till exempel , om vi vill få all information om en person i en applikation per sidor, tilldelar vi först varje rad ett sekvensnummer med funktionen ROW_NUMBER() . För det andra, sortera raderna efter den begärda sidan.
Följande uttalande förklarar det tydligare:
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></=>=>