2009-08-08 35 views
99

Tôi muốn truy vấn của mình trả về các hàng của bảng trong đó một cột chứa giá trị cụ thể trước, sau đó trả về phần còn lại của các hàng được sắp xếp theo thứ tự bảng chữ cái.Làm cách nào để trả về các hàng có giá trị cụ thể trước tiên?

Nếu tôi có một cái gì đó bảng như ví dụ sau:

- Table: Users 
- id - name - city 
- 1 George Seattle 
- 2 Sam  Miami 
- 3 John New York 
- 4 Amy  New York 
- 5 Eric Chicago 
- 6 Nick New York 

Và sử dụng rằng bảng tôi muốn truy vấn của tôi để trả lại hàng có chứa New York đầu tiên, và sau đó là phần còn lại của các hàng chữ cái theo thành phố . Điều này có thể thực hiện bằng cách sử dụng chỉ một truy vấn không?

+0

Hãy xem xét việc thay đổi câu trả lời chấp nhận vào thứ hai nếu bạn có thể, như là người đầu tiên chỉ hoạt động cho MySQL và không cho MSSQL. – Magisch

+0

Xong. Câu hỏi ban đầu của tôi là về MySQL, nhưng các thẻ không phản ánh điều đó. – Phoexo

+0

Cảm ơn bạn. Tôi đã đi qua sáng nay trong một nỗ lực để làm một cái gì đó tương tự cho một vấn đề tôi đã có. :) – Magisch

Trả lời

159

Mở SQL Server, Oracle, DB2, và nhiều hệ thống cơ sở dữ liệu khác, đây là những gì bạn có thể sử dụng:

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city 
+0

Cách này hoạt động trong' db2'. – Samiron

+4

Tuyệt vời, cũng hoạt động trong MSSQL. – Josh

+2

Công trình này, câu trả lời được chấp nhận thì không. –

92

Nếu phương ngữ SQL của bạn đủ thông minh để chữa trị biểu thức boolean là có một giá trị số, sau đó bạn có thể sử dụng:

SELECT * 
FROM `Users` 
ORDER BY (`city` = 'New York') DESC, `city` 
+2

Câu trả lời này khiến tôi cảm thấy câm lặng. Thực hiện tốt hỗn loạn. – Bill

+2

Tính năng này có hoạt động trên MSSQL không? –

+1

@MehrdadAfshari: Không, MSSQL quá ngu ngốc để xử lý các phép thử tương đương trong mệnh đề 'ORDER BY'. – chaos

2

Câu trả lời của tôi có thể cũ và không bắt buộc nhưng ai đó có thể cần cách tiếp cận khác, do đó đăng bài tại đây.

Tôi đã yêu cầu tương tự như vậy, đã làm việc cho tôi.

Select * from Users 
ORDER BY 
(CASE WHEN city = 'New York' THEN 0 ELSE 1 END), city 
GO 

PS

này là dành cho SQL

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