ORDER BY è la clausola di SQL server che permette di ordinare un risultato in base alle colonne.
In questa pagina
Uso
ORDER BY è inserito al termine di una query, e riporta le colonne per cui un risultato va ordinato; a parità di valori per la prima colonna si ordina per la seconda – se presente – e così via
Esempio:
SELECT Nome, Cognome, ComuneNascita FROM Anagrafica ORDER BY ComuneNascita, Cognome, Nome
Questa query ordina i risultati per comune di nascita, ma siccome molte persone possono essere nate nello stesso comune, ordina all’interno dello stesso comune per cognome, e poi per nome.
L’ordinamento si può specificare anche per posizione nella SELECT. Per esempio la query precedente può essere scritta anche come:
SELECT Nome, Cognome, ComuneNascita FROM Anagrafica ORDER BY 3, 2, 1
I colori sono stati aggiunti per chiarezza.
ORDER BY in subquery
Non è possibile usare ORDER BY in subquery, sostanzialmente perché sarebbero superflue, visto che il piano di esecuzione ordina in base alla query principale e non delle indicazioni nella query.
Esempio:
SELECT COUNT(*) FROM Anagrafica WHERE CodiceFiscale IN ( SELECT CodiceFiscale FROM WhiteList ORDER BY CodiceFiscale )
Questa query restituirà errore 1033 (La clausola ORDER BY non è consentita in viste, funzioni inline, tabelle derivate, sottoquery ed espressioni di tabella comuni a meno che non sia specificata anche la clausola TOP, OFFSET o FOR XML.)
Siccome è possibile estrarre solo i primi elementi di una query con l’istruzione TOP, diventa possibile usare ORDER BY anche in una subquery, per indicare il criterio con cui sono scelti i primi elementi. Quindi questa query funziona:
SELECT COUNT(*) FROM Anagrafica WHERE CodiceFiscale IN ( SELECT TOP 10 CodiceFiscale FROM WhiteList ORDER BY CodiceFiscale )
è quindi possibile “barare” se si usa TOP 100 PERCENT in questo modo:
SELECT COUNT(*) FROM Anagrafica WHERE CodiceFiscale IN ( SELECT TOP 100 PERCENT CodiceFiscale FROM WhiteList ORDER BY CodiceFiscale )
Ma molto probabilmente non è un “trucco” utile.
Vedere anche
L’errore con codice 108: Il numero di posizione %1! di ORDER BY non è compreso nell’intervallo dei numeri degli elementi specificati nell’elenco di selezione.
Lerrore con codice 1033: La clausola ORDER BY non è consentita in viste, funzioni inline, tabelle derivate, sottoquery ed espressioni di tabella comuni a meno che non sia specificata anche la clausola TOP, OFFSET o FOR XML.
6 commenti su “ORDER BY”