2012-06-12 12 views
7

Czy istnieje sposób łączenia ORDER BY i IS NULL w sql, aby można było zamówić przez kolumnę, jeśli kolumna nie ma wartości null, ale jeśli jest pusta, należy zamówić przez inną kolumnę?Zamów przez kolumnę1, jeśli kolumna1 ma wartość zerową, w przeciwnym razie zamówienie przez kolumnę2

Dzięki!

+1

[http://stackoverflow.com/questions/5055540/order-by-countcolumns-not-null][1] - tutaj jest odpowiedź na pytanie [1]: http: // stackoverflow.com/questions/5055540/order-by-countcolumns-not-null – yAnTar

Odpowiedz

20

Coś jak:

ORDER BY CASE 
    WHEN Column1 IS NOT NULL THEN Column1 
    ELSE Column2 
END 

samo jak pisanie:

ORDER BY IFNULL(Column1, Column2) 
+0

dziękuję bardzo. Nie rozumiem tego zdania NULL: "wartości pojawiają się u góry po posortowaniu rosnąco, tak dla wszystkich NULL" czy możesz wyjaśnić nieco więcej? – 1252748

+0

Wartość NULL jest mniejsza niż jakakolwiek wartość posortowana rosnąco. Jeśli twoje dane to "-1, 0, 1, NULL" sortowanie rosnące w wyniku "NULL, -1, 0, 1". –

+0

this 'ORDER BY CASE KIEDY kolumna 1 jest pusta THEN Column2 ELSE Column1 END' wydaje mi się nieco bardziej zrozumiała. czy mogę _ użyć "instrukcji" END? – 1252748

1

Można spróbować z następujących czynności:

ORDER BY ISNULL(firstField, secondField) 
+2

MySQL ISNULL zwraca 1/0, a nie niepustą kolumnę (czy miałeś na myśli IFNULL?). –

4

Spróbuj

ORDER BY COALESCE(fieldA, fieldB); 
0

Nie mam żadnych tabel atm gdzie mogę go przetestować, ale to może działać, przynajmniej nie bez użytkowej danych:

SELECT * FROM table1 
LEFT JOIN table2 ON table1.id = table2.id 
WHERE 1 
ORDER BY IF(table2.id, table1.id, table1.name) 

Również nie wiem jak kolejność będzie wyglądać, jeśli Table2. id jest czasem zerowe, wydaje się bardzo niestabilne.

+0

Nie ma "IF" w SQL (zdecydowanie nie dla PostgreSQL) –

Powiązane problemy