Sto cercando di ordinare in base a più colonne in SQL e in diverse direzioni. column1
sarebbe ordinato in ordine decrescente e column2
crescente.
Come posso fare questo?
Sto cercando di ordinare in base a più colonne in SQL e in diverse direzioni. column1
sarebbe ordinato in ordine decrescente e column2
crescente.
Come posso fare questo?
Risposte:
ORDER BY column1 DESC, column2
Questo ordina prima tutto column1
(decrescente) e poi column2
(crescente, che è l'impostazione predefinita) ogni volta che i column1
campi per due o più righe sono uguali.
column1
prima tutto e poi column2
ogni volta che i column1
campi per due righe sono uguali.
column2
e poi esegue l'ordinamento STABILE per column1
. Questo è più chiaro per le persone che sanno cos'è l'ordinamento stabile.
Le altre risposte mancano di un esempio concreto, quindi eccolo qui:
Data la seguente tabella Persone :
FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
Thomas | More | 1478
Thomas | Jefferson | 1826
Se si esegue la query di seguito:
SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC
Il set di risultati sarà simile al seguente:
FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | More | 1478
Thomas | Jefferson | 1826
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc
c'è un modo per superare questo?
FirstName, LastName
voci duplicate con distintiYearOfBirth
L'ordinamento di più colonne dipende dai valori corrispondenti di entrambe le colonne: ecco il mio esempio di tabella in cui sono due colonne denominate con alfabeti e numeri e i valori in queste due colonne sono ordini asc e desc .
Ora eseguo Order By in queste due colonne eseguendo il comando seguente:
Ora di nuovo inserisco nuovi valori in queste due colonne, dove il valore Alfabeto in ordine ASC :
e le colonne nella tabella di esempio si presentano così. Ora esegui di nuovo la stessa operazione:
Puoi vedere i valori nella prima colonna sono in ordine decrescente ma la seconda colonna non è in ordine ASC.
(g, 10),(g,12)
. Quindi, esegui la query ordine per ordine, otterrai la seconda colonna come ASC
ordine (ciò significag-10,g-11,g-12)
Puoi utilizzare più ordini a più condizioni,
ORDER BY
(CASE
WHEN @AlphabetBy = 2 THEN [Drug Name]
END) ASC,
CASE
WHEN @TopBy = 1 THEN [Rx Count]
WHEN @TopBy = 2 THEN [Cost]
WHEN @TopBy = 3 THEN [Revenue]
END DESC