logo

SQL servera rindas numurs

Rindas numurs ir visizplatītākais ranžēšanas funkcija izmanto SQL Server. Funkcija ROW_NUMBER(). ģenerē kārtas numuru katrai nodalījuma rindai iegūtajā izlaidē. Katrā nodalījumā pirmās rindas numurs sākas ar 1. Mums vienmēr ir jāizmanto SAKĀRTOT PĒC klauzulu, lai nodrošinātu, ka numuri tiek piešķirti pareizā secībā. Šīs funkcijas atgrieztās vērtības ir no BIG INT datu tips. Šī funkcija ir iekļauta SQL Server 2005 un jaunākās MS SQL versijās.

ROW_NUMBER nosaka pagaidu vērtība kad vaicājums tiek izpildīts. Ja vēlaties iegūt skaitļus tabulā, jums ir jāredz IDENTITĀTE īpašums un SECĪBA . Ja funkcija ROW_NUMBER SQL Server sastopas ar divām identiskām vērtībām vienā nodalījumā, tā piešķir tām dažādus ranga numurus. Ranga numurs tiks noteikts pēc to parādīšanas secības.

Nav garantijas, ka šīs funkcijas atgrieztā vērtība katrai izpildei būs vienāda, ja vien tālāk norādītais nav patiess:

  • Sadalīto kolonnu vērtības ir unikālas
  • ORDER BY kolonnu vērtības ir unikālas
  • Sadalījumu un secības kolonnu kombinācija ir unikāla

Sintakse

Tālāk ir norādīta sintakse, kas ilustrē funkciju ROW_NUMBER():

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

Ļaujiet mums saprast funkcijas ROW NUMBER() sintaksi:

BEIGAS

1nf 2nf 3nf

Ir svarīgi saprast šo klauzulu, kas norāda logu vai rindu kopu, kurā darbojas loga funkcija. PARTITION BY un ORDER BY ir divas iespējamās OVER klauzulas. OVER klauzulas izteiksme ORDER BY tiek atbalstīta, ja rindām ir jānonāk noteiktā secībā, lai funkcija tiktu izpildīta.

NODAĻA

  • Tā ir izvēles klauzula, kas sadala rezultātu kopu nodalījumos (rindu grupās). Pēc tam funkcija ROW NUMBER() tiek piemērota katram nodalījumam un piešķir katra nodalījuma ranga numuru atsevišķi.
  • Ja mēs izlaidīsim nodalījumu pēc klauzulas, funkcija ROW_NUMBER visu rezultātu uzskatīs par vienu nodalījumu un nodrošinās ranžēšanu secībā no augšas uz leju.

SAKĀRTOT PĒC

Šī klauzula ļauj mums kārtot rezultātu kopas rindas katrā nodalījumā. Tā ir obligāta klauzula, jo funkcija ROW_NUMBER() ir atkarīga no secības.

Piemērs

Ļaujiet mums saprast, kā funkcija ROW_NUMBER darbojas SQL Server tabulā, izmantojot piemēru. Vispirms mēs izveidosim tabulu ar nosaukumu ' Personas ' izmantojot tālāk norādīto paziņojumu:

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

Tālāk mēs pievienosim dažus ierakstus šai tabulai, izmantojot tālāk norādīto paziņojumu:

b+ koki
 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); 

Pēc tam pārbaudiet datus, izmantojot ATLASĪT paziņojums, apgalvojums. Mēs saņemsim šādu izvadi:

SQL servera rindas numurs

1. Vienkāršs ROW_NUMBER() piemērs

Sekojošais paziņojums parāda personas datus un pievieno secīgu veselu skaitli uz katru rindu, izmantojot ROW_NUMBER():

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

Šeit mēs neesam norādījuši klauzulu PARTITION BY, lai funkcija ROW_NUMBER() visu rezultātu kopu uzskatītu par vienu nodalījumu. Pēc paziņojuma izpildes mēs saņemsim šādu izvadi:

SQL servera rindas numurs

2. ROW_NUMBER() virs nodalījumu piemēra

Šajā piemērā izmantotā funkcija ROW NUMBER() nodrošina kārtas numuru katram ierakstam tabulas nodalījumā. Tas vienmēr atkārtoti inicializēja rindas numuru, kad mainās gads:

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

Šeit mēs esam izmantojuši klauzulu PARTITION BY, kas sadala 'Personas' tabulu nodalījumos, pamatojoties uz 'gadi' kolonna. Pēc izpildes mēs saņemsim šādu izvadi:

SQL servera rindas numurs

3. ROW_NUMBER() Lapu kārtošanas piemērs

java matemātika

Lapu šķirošanai varam izmantot arī funkciju ROW_NUMBER(). Piemēram , ja vēlamies lietojumprogrammā iegūt visu informāciju par personu pa lapām, vispirms katrai rindai piešķirsim kārtas numuru, izmantojot funkciju ROW_NUMBER(). Otrkārt, kārtojiet rindas pēc pieprasītās lapas.

Šis paziņojums to izskaidro skaidrāk:

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