ORDER BY

0
(0)

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.

Hai trovato utile questo contenuto?

Valutazione: 0 / 5. Voti: 0

Vota per primo questo contenuto

Ci dispiace che tu abbia trovato inutile o sbagliato questo contenuto

Lasciaci un messaggio

Come possiamo migliorare?