2016-06-23 34 views
6

Ho alcuni dati nella mia tabella di seguitoordine SQL da valori assoluti

table_1 
    column_1  column_2 
     1   10 
     1   20 
     1   30 
     1   40 
     1   50 
     2   -10 
     2   -20 
     2   -30 
     2   -40 
     2   -50 

voglio cambiare questo risultato a qualcosa di simile

column_1  column_2 
    1   10 
    2   -10 
    1   20 
    2   -20 
    1   30 
    2   -30 
    1   40 
    2   -40 
    1   50 
    2   -50 

Non sono sicuro se c'è un modo per fai questo usando l'ordine? Quello che sto cercando di dimostrare è che sto cercando di mostrare (10, -10) come un gruppo di dati

+3

Si tratta di un requisito che, in caso di parità di valore assoluto, positivo viene prima di negativo? –

+0

@JeroenMostert, sì si può guardare in questo modo, voglio farlo come (10, -10) come un gruppo di dati – RedRocket

+0

Il set di risultati è solo un mucchio di righe, non un gruppo di alcun tipo. L'ordine in cui vengono restituiti non è "raggruppamento". Se lo vuoi, puoi farlo dal lato client o vuoi una query più complicata che raggruppa le cose in qualche modo ([con 'GROUP BY' e qualche concatenazione] (http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenare-strings-in-sql-server)). –

risposta

7

Si può semplicemente utilizzare ABS() funzione, che restituisce il valore assoluto di un numero:

SELECT * FROM YourTable 
ORDER BY ABS(Column_2),column_2 desc 

Questa query verrà ordinata in base al valore assoluto di Column_2

2

Sembra che si desideri ordinare sul valore assoluto della seconda colonna, quindi sulla prima colonna.

select column_1, column_2 from table_1 order by abs(column_2),column_1 
10
SELECT * 
FROM <table> 
ORDER BY abs(column_2), column_2 desc