Transact-SQL: Selezione di record casuali da una tabella

Tutti i principali DBMS hanno questa possibilità. Nell’esempio sottostante vengono presi 1000 record in maniera

casuale da TABELLA:

SELECT TOP 1000 *
FROM TABELLA
ORDER BY NEWID()

Per prenderne uno solo:

SELECT TOP 1 *
FROM TABELLA
ORDER BY NEWID()

Con un piccolo sforzo in più si possono anche ordinare. Ecco un esempio:

CREATE TABLE VENDITE (AGENTE VARCHAR(20), PRODOTTO VARCHAR(20), PAESE VARCHAR(20), QUANTITA INT)

INSERT INTO VENDITE VALUES ('AGENTE 1', 'PS3', 'ITALIA', 20)
INSERT INTO VENDITE VALUES ('AGENTE 1', 'PS3', 'SPAGNA', 30)
INSERT INTO VENDITE VALUES ('AGENTE 1', 'PS3', 'FRANCIA', 10)
INSERT INTO VENDITE VALUES ('AGENTE 1', 'PS3', 'GERMANIA', 15)
INSERT INTO VENDITE VALUES ('AGENTE 1', 'WII', 'ITALIA', 10)
INSERT INTO VENDITE VALUES ('AGENTE 1', 'WII', 'SPAGNA', 25)
INSERT INTO VENDITE VALUES ('AGENTE 1', 'WII', 'INGHILTERRA', 8)
INSERT INTO VENDITE VALUES ('AGENTE 1', 'WII', 'GERMANIA', 35)
INSERT INTO VENDITE VALUES ('AGENTE 2', 'PS3', 'ITALIA', 22)
INSERT INTO VENDITE VALUES ('AGENTE 2', 'PS3', 'SPAGNA', 32)
INSERT INTO VENDITE VALUES ('AGENTE 2', 'PS3', 'FRANCIA', 16)
INSERT INTO VENDITE VALUES ('AGENTE 2', 'PS3', 'GERMANIA', 19)
INSERT INTO VENDITE VALUES ('AGENTE 2', 'WII', 'ITALIA', 23)
INSERT INTO VENDITE VALUES ('AGENTE 2', 'WII', 'SPAGNA', 14)
INSERT INTO VENDITE VALUES ('AGENTE 2', 'WII', 'INGHILTERRA', 7)
INSERT INTO VENDITE VALUES ('AGENTE 2', 'WII', 'GERMANIA', 33)

Con la query:


SELECT T.*
FROM (
SELECT TOP 5 *
FROM VENDITE
ORDER BY NEWID()
) T
ORDER BY T.QUANTITA

Si ottiene un risultato simile a questo:

Agente Prodotto Paese Quantita
AGENTE 1 WII INGHILTERRA 8
AGENTE 2 WII SPAGNA 14
AGENTE 1 PS3 GERMANIA 15
AGENTE 2 PS3 GERMANIA 19
AGENTE 2 PS3 ITALIA 22

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>