2009-10-23 9 views

Odpowiedz

12

Jeśli wiesz, że salaryplus zawsze będzie większa niż salaryminus, to można zrobić

order by coalesce(salaryplus, salaryminus, 0) 

coalesce powróci pierwszą wartość, która nie jest null, lub (w tym przykładzie) 0, jeśli obie wartości są zero.

przeciwnym razie zrobić coś takiego:

order by greatest(ifnull(salaryminus,0), ifnull(salaryplus,0)) 

To będzie traktować zarówno salaryminus i salaryplus jako 0, jeśli one są nieważne i będzie zamówić przez większą z dwóch.

+1

Należy zauważyć, że 'GREATEST' nie jest standardowym SQL. – Charles

+1

To nie jest standard, ale jest dostarczany przez MySQL, a także PostgreSQL i Oracle. Jest napisane "MAX" w SQLite. Jeśli musisz użyć SQL Server lub potrzebujesz napisać standardowy SQL dla pytania domowego, użyj "' ORDER BY CASE WHERE salaryminus> salaryplus THEN salaryminus ELSE salaryplus END' " –

0

Możesz użyć coalesce, aby zamiast tego zamienić ewentualnie puste kolumny na konkretne wartości - np. coalesce(salaryminus, -99999999) da dużą liczbę ujemną, jeśli salaryminus ma wartość null, ale zwróci salaryminus, jeśli nie będzie wartością null.

Powiązane problemy