In questa pagina
Messaggio
Codice: 169
Messaggio in italiano: Nell’elenco ORDER BY la stessa colonna è stata specificata più di una volta. In tale elenco le colonne devono essere univoche.
Messaggio in inglese: A column has been specified more than once in the order by list. Columns in the order by list must be unique.
Spiegazione
L’ordine dei campi in una clausola ORDER BY determina la precedenza dell’ordinamento: si ordina per il primo campo, quindi per il secondo e così via.
Se si specifica il nome di un campo per due volte è come specificare due criteri diversi contemporaneamente.
Esempio:
SELECT Nome, Cognome FROM Anagrafica ORDER BY Cognome, Nome, Cognome
in questo caso non si capisce se l’ordinamento per cognome sia prima o dopo quello per nome.
Causa
Un campo è specificato più volte dopo ORDER BY.
Soluzione
Rimuovere uno dei duplicati del campo. Rispetto all’esempio precedente, le due alternative sono entrambe valide:
SELECT Nome, Cognome FROM Anagrafica ORDER BY Cognome, Nome,Cognome
SELECT Nome, Cognome FROM Anagrafica ORDER BYCognome, Nome, Cognome
Nel caso in cui due tabelle abbiano campi con lo stesso nome, è sufficiente aggiungere il prefisso che identifica la tabella al campo:
SELECT a.Nome, a.Cognome, u.Nome, u.Cognome FROM Anagrafica a INNER JOIN Utenti u ON a.CodiceFiscale = u.CodiceFiscale ORDER BY Cognome, Cognome
Questa query restituisce un errore 209 (ciascuna colonna Cognome è ambigua) e un errore 169 perché riconosce che Cognome è scritto più volte.
Con i prefissi che fanno capire la tabella di provenienza la query funziona:
SELECT a.Nome, a.Cognome, u.Nome, u.Cognome FROM Anagrafica a INNER JOIN Utenti u ON a.CodiceFiscale = u.CodiceFiscale ORDER BY a.Cognome, u.Cognome