Ordinamento di righe (Visual Database Tools)
È possibile ordinare le righe nel risultato di una query. In altre parole, è possibile identificare una colonna o un gruppo di colonne particolare i cui valori determinano l'ordine delle righe nel gruppo di risultati.
[!NOTA]
Il criterio di ordinamento è determinato in parte dalla sequenza di confronto della colonna. Per cambiare tale sequenza, è possibile utilizzare la finestra di dialogo Regole di confronto.
I risultati delle query possono essere ordinati in diversi modi:
È possibile disporre le righe in ordine crescente o decrescente Per impostazione predefinita, in SQL vengono utilizzate le colonne ORDER BY per disporre le righe in ordine crescente. Per disporre, ad esempio, i titoli dei libri in ordine crescente in base al prezzo, è sufficiente ordinare le righe in base alla colonna price. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT * FROM titles ORDER BY price
Se invece si desidera disporre i titoli indicando per primi i libri più costosi, è possibile specificare in modo esplicito un ordinamento di questo tipo, ovvero indicare che le righe dei risultati devono essere disposte in ordine decrescente in base ai valori della colonna price. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT * FROM titles ORDER BY price DESC
È possibile eseguire l'ordinamento in base a più colonne È possibile, ad esempio, creare un gruppo di risultati con una riga per ogni autore, eseguendo l'ordinamento prima in base allo stato e poi in base alla città. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT * FROM authors ORDER BY state, city
È possibile eseguire l'ordinamento in base a colonne non presenti nel gruppo di risultati È possibile, ad esempio, creare un gruppo di risultati con i libri più costosi indicati per primi anche se i prezzi non sono specificati. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT title_id, title FROM titles ORDER BY price DESC
È possibile eseguire l'ordinamento in base a colonne derivate È possibile, ad esempio, creare un gruppo di risultati in cui ogni riga contenga il titolo di un libro, indicando per primi i libri con i diritti d'autore più elevati per una singola copia. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT title, price * royalty / 100 as royalty_per_unit FROM titles ORDER BY royalty_per_unit DESC
In questo esempio è evidenziata la formula che consente di calcolare i diritti di autore corrisposti per ciascuna copia di un libro.
Per calcolare una colonna derivata, è possibile utilizzare la sintassi SQL, come è stato fatto nell'esempio precedente, oppure è possibile utilizzare una funzione definita dall'utente che restituisca un valore scalare. Per ulteriori informazioni sulle funzioni definite dall'utente, vedere la documentazione di SQL Server.
È possibile ordinare righe raggruppate È possibile ad esempio creare un gruppo di risultati in cui ciascuna riga indichi una città e il numero di autori residenti in tale città, specificando per prime le città con più autori. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT city, state, COUNT(*) FROM authors GROUP BY city, state ORDER BY COUNT(*) DESC, state
Si noti che la query utilizza state come colonna di ordinamento secondaria. Due stati che hanno lo stesso numero di autori verranno quindi disposti in ordine alfabetico.
È possibile eseguire l'ordinamento utilizzando dati internazionali È possibile ordinare una colonna utilizzando convenzioni di confronto diverse dalle convenzioni predefinite per tale colonna. È possibile ad esempio scrivere una query che recuperi tutti i libri di Jaime Patiño. Per visualizzare i titoli in ordine alfabetico, si utilizza una sequenza di confronto spagnola per la colonna title. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT title FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id INNER JOIN titles ON titleauthor.title_id = titles.title_id WHERE au_fname = 'Jaime' AND au_lname = 'Patiño' ORDER BY title COLLATE SQL_Spanish_Pref_CP1_CI_AS