Il numero di riga è il più comune funzione di classificazione utilizzato in SQL Server. La funzione ROW_NUMBER() genera un numero sequenziale per ogni riga all'interno di una partizione nell'output risultante. In ogni partizione, il numero della prima riga inizia con 1. Dobbiamo sempre usare il ORDINATO DA clausola per garantire che i numeri siano assegnati nella sequenza corretta. I valori restituiti da questa funzione sono of GRANDE INT tipo di dati. Questa funzione è disponibile con SQL Server 2005 e versioni successive di MS SQL.
ROW_NUMBER determina il valore temporaneo quando la query viene eseguita. Se vuoi ottenere i numeri in una tabella, devi vedere il file IDENTITÀ proprietà e SEQUENZA . Quando la funzione ROW_NUMBER in SQL Server rileva due valori identici nella stessa partizione, assegna loro numeri di rango diversi. Il numero della classifica sarà determinato dall'ordine in cui vengono visualizzati.
Non vi è alcuna garanzia che il valore restituito da questa funzione venga ordinato nello stesso modo per ogni esecuzione a meno che non si verifichino le seguenti condizioni:
- I valori delle colonne partizionate sono univoci
- I valori delle colonne ORDER BY sono univoci
- La combinazione delle colonne Partizione e Ordina per è univoca
Sintassi
Di seguito è riportata la sintassi che illustra la funzione ROW_NUMBER():
ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
Cerchiamo di comprendere la sintassi della funzione ROW NUMBER():
SOPRA
È importante comprendere questa clausola che specifica la finestra o l'insieme di righe su cui opera la funzione finestra. PARTITION BY e ORDER BY sono le due possibili clausole della clausola OVER. L'espressione ORDER BY della clausola OVER è supportata quando le righe devono presentarsi in un ordine specifico affinché la funzione possa essere eseguita.
PARTIZIONE PER
funzione Python CHR
- È una clausola facoltativa che divide il set di risultati in partizioni (gruppi di righe). Quindi la funzione ROW NUMBER() viene applicata a ciascuna partizione e assegna il numero di rango di ciascuna partizione separatamente.
- Se omettiamo la clausola partizione per, la funzione ROW_NUMBER tratterà l'intero risultato come una singola partizione e fornirà la classificazione dall'alto verso il basso.
ORDINATO DA
Questa clausola ci consente di ordinare le righe del set di risultati all'interno di ciascuna partizione. È una clausola obbligatoria perché la funzione ROW_NUMBER() dipende dall'ordine.
Esempio
Cerchiamo di capire come funziona la funzione ROW_NUMBER nella tabella SQL Server con un esempio. Per prima cosa creeremo una tabella denominata ' Persone ' utilizzando la seguente istruzione:
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 );
Successivamente, aggiungeremo alcuni record in questa tabella utilizzando la seguente istruzione:
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);
Successivamente, verifica i dati utilizzando il file SELEZIONARE dichiarazione. Otterremo l'output seguente:
1. Esempio semplice ROW_NUMBER()
La seguente affermazione visualizza i dettagli della persona e aggiunge un numero intero sequenziale a ogni riga utilizzando ROW_NUMBER():
SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons;
Qui non abbiamo specificato la clausola PARTITION BY in modo che la funzione ROW_NUMBER() tratterà l'intero set di risultati come una singola partizione. Dopo l'esecuzione della dichiarazione, otterremo il seguente output:
2. ROW_NUMBER() su esempio di partizioni
La funzione ROW NUMBER() utilizzata in questo esempio fornisce un numero sequenziale a ciascun record all'interno di una partizione in una tabella. Reinizializza sempre il numero di riga quando cambia l'anno:
sdlc
SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons;
Qui abbiamo utilizzato la clausola PARTITION BY che divide il file 'Persone' tabella in partizioni basate su 'anni' colonna. Dopo l'esecuzione, otterremo l'output seguente:
3. ROW_NUMBER() Esempio di impaginazione
Possiamo anche usare la funzione ROW_NUMBER() per l'impaginazione. Per esempio , se desideriamo ottenere tutte le informazioni di una persona in un'applicazione per pagine, assegneremo prima a ciascuna riga un numero sequenziale utilizzando la funzione ROW_NUMBER(). In secondo luogo, ordina le righe in base alla pagina richiesta.
La seguente dichiarazione lo spiega più chiaramente:
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></=>=>