2016-06-23 15 views
6

mam pewne dane w moim tabeli poniżejSQL zamówienie przez wartościach bezwzględnych

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 

Chcę zmienić ten wynik coś takiego

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

nie jestem pewien, czy istnieje sposób, aby zrobić to, używając kolejności według? Co staram się pokazać to staram się pokazać (10, -10) jako grupa danych

+3

Czy jest to wymóg, że w przypadku remisu o wartości bezwzględnej, pozytywne jest przed negatywne? –

+0

@JeroenMostert, tak możesz na to patrzeć w ten sposób, chcę to zrobić jako (10, -10) jako grupa danych. – RedRocket

+0

Zestaw wyników to tylko kilka wierszy, a nie grupa jakiegokolwiek rodzaju. Kolejność, w jakiej je zwrócisz, nie jest "grupowaniem". Jeśli chcesz, możesz to zrobić po stronie klienta, lub chcesz bardziej skomplikowane zapytanie, które jakoś grupuje rzeczy ([z 'GROUP BY' i niektórymi konkatenacjami] (http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-string-in-sql-server)). –

Odpowiedz

7

można po prostu użyć ABS() funkcję, która zwraca wartość bezwzględną liczby:

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

To zapytanie zostanie uporządkowane według bezwzględnej wartości: Column_2

2

Wygląda na to, że chcesz posortować wartość bezwzględną drugiej kolumny, a następnie pierwszej kolumny.

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 
Powiązane problemy