2012-06-12 36 views
7

Có cách nào để kết hợp ORDER BYIS NULL trong sql để tôi có thể đặt hàng theo cột nếu cột không rỗng, nhưng nếu cột đó không có giá trị bởi một cột khác?Đặt hàng theo Cột1 nếu Cột1 không rỗng, nếu không, theo thứ tự của Cột2

Cảm ơn!

+1

[http://stackoverflow.com/questions/5055540/order-by-countcolumns-not-null][1] - đây là câu trả lời cho câu hỏi của bạn [1]: http: // stackoverflow.com/questions/5055540/order-by-countcolumns-not-null – yAnTar

Trả lời

20

Cái gì như:

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

Tương tự như viết:

ORDER BY IFNULL(Column1, Column2) 
+0

cảm ơn bạn rất nhiều. Tôi không hiểu câu này NULL: "giá trị xuất hiện ở đầu khi sắp xếp tăng dần để cho tất cả NULL" bạn có thể giải thích thêm một chút không? – 1252748

+0

NULL nhỏ hơn bất kỳ giá trị nào khi sắp xếp tăng dần. Nếu dữ liệu của bạn là kết quả phân loại tăng dần '-1, 0, 1, NULL' trong' NULL, -1, 0, 1'. –

+0

này 'ORDER BY CASE WHEN Column1 IS NULL THEN Column2 ELSE Column1 END' dường như rõ ràng hơn một chút đối với tôi. ihave_ để sử dụng câu lệnh 'END'? – 1252748

1

Bạn có thể thử như sau:

ORDER BY ISNULL(firstField, secondField) 
+2

MySQL ISNULL trả về 1/0, không phải là cột không null (ý bạn là IFNULL?). –

4

Hãy thử điều này

ORDER BY COALESCE(fieldA, fieldB); 
0

tôi không có bất kỳ Bàn ATM nơi tôi có thể kiểm tra nó, nhưng điều này có thể làm việc, ít nhất là nó đã không có dữ liệu sử dụng được:

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

Ngoài ra tôi không biết làm thế nào để có thể trông giống như nếu table2. id là null đôi khi, có vẻ rất không ổn định.

+0

Không có 'IF' trong SQL (chắc chắn không phải cho Postgres) –

Các vấn đề liên quan