>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