Funzione SQL per estrarre un numero premeditato di elementi a partire ...

lunedì 08 novembre 2010 - 14.33
Tag Elenco Tags  VB.NET  |  .NET 1.1  |  Windows XP  |  Visual Studio 2003  |  Access (.mdb)  |  Internet Explorer 7.0

Alfetta87 Profilo | Newbie

Buongiorno a tutti

Avrei bisogno di sapere se esiste una funzione sql per le query che mi permette di dirgli su una SELECT di estrarre un certo numero di elementi.

Per i primi N elementi esiste la funzione TOP.

Se volessi invece estrarre gli elementi per esempio dal decimo al ventesimo?

Esempio: "SELECT TOP 10 * FROM tabella" mi estrae i primi 10 elementi presenti nel database.
Esiste una funzione in cui posso dirgli tirami fuori gli elementi da 10 a 20?

Grazie
Paolo

lbenaglia Profilo | Guru

>Esiste una funzione in cui posso dirgli tirami fuori gli elementi
>da 10 a 20?

Ciao Paolo,

Se utilizzi SQL Server 2005 o successivo prova a dare un'occhiata a questo articolo:
http://www.davidhayden.com/blog/dave/archive/2005/12/30/2652.aspx

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

dinoxet Profilo | Senior Member

POTRESTI FARE COSì :

SELECT LAST (20) *
FROM (SELECT TOP 10 * FROM tabella) AS TAB

UN IDEA...
DINOXET
__________________________________________
impossible is only a word

alx_81 Profilo | Guru

>Buongiorno a tutti
Ciao

>Per i primi N elementi esiste la funzione TOP.
>Se volessi invece estrarre gli elementi per esempio dal decimo
>al ventesimo?
>Esempio: "SELECT TOP 10 * FROM tabella" mi estrae i primi 10
>elementi presenti nel database.
>Esiste una funzione in cui posso dirgli tirami fuori gli elementi da 10 a 20?
alla fine si tratta di "paginazione", però ti serve sempre un ordinamento ben definito.
Una volta che hai definito l'ordinamento, puoi segnarti un progressivo per il resultset e poi ricavare solo quelli che ti interessano (in base al range sul progressivo).
Puoi anche usare delle ranking functions, come nell'esempio che segue:

CREATE TABLE #foo ( Id int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED , Valore varchar(10) NOT NULL ) GO INSERT INTO #foo (Valore) VALUES ('UNO') INSERT INTO #foo (Valore) VALUES ('DUE') INSERT INTO #foo (Valore) VALUES ('TRE') INSERT INTO #foo (Valore) VALUES ('QUATTRO') INSERT INTO #foo (Valore) VALUES ('CINQUE') INSERT INTO #foo (Valore) VALUES ('SEI') INSERT INTO #foo (Valore) VALUES ('SETTE') INSERT INTO #foo (Valore) VALUES ('OTTO') INSERT INTO #foo (Valore) VALUES ('NOVE') INSERT INTO #foo (Valore) VALUES ('DIECI') GO -- top 5 SELECT TOP 5 * FROM #foo; /* Id Valore ----------- ---------- 1 UNO 2 DUE 3 TRE 4 QUATTRO 5 CINQUE */ -- ricavo le 5 in mezzo all'insieme WITH Paginatore AS ( SELECT Id , Valore , r_num = ROW_NUMBER() OVER(ORDER BY Id) FROM #foo ) SELECT Valore FROM Paginatore WHERE r_num BETWEEN 4 AND 8 /* Valore ---------- QUATTRO CINQUE SEI SETTE OTTO */ DROP TABLE #foo GO

>Grazie
di nulla!

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5