2012-02-20 32 views

Trả lời

12
select * from Members 
order by case when MemberID = XXX then 0 else 1 end 
6

này nên làm việc và nó cũng sẽ cho phép bạn đặt các hạng mục còn lại bởi MemberID (Giả sử xxx = 12 trong ví dụ này)

SELECT * 
FROM Members 
ORDER BY CASE WHEN MemberID=12 THEN NULL ELSE isnull(MemberID,0) END 

Nếu cột memberID không thể chứa null, bạn có thể loại bỏ điều này có thể hoạt động tốt hơn một chút.

SELECT * 
FROM Members 
ORDER BY CASE WHEN MemberID=12 THEN NULL ELSE MemberID END 
+0

Điều gì sẽ xảy ra nếu MemberID chứa các giá trị âm? – Magnus

+0

Tôi cho rằng đó có thể là một cột nhận dạng. Nếu nó chứa các giá trị âm bạn chỉ có thể thay thế -1 bằng một giá trị rỗng. Cập nhật câu trả lời của tôi để mạnh mẽ hơn và xử lý các giá trị memberID âm. – JohnFx

0
SELECT 
    CASE WHEN MemberID = 'xxx' AS 1 ELSE 0 END CASE AS magic, 
    * 
FROM Members 
ORDER BY magic DESC 

Cú pháp có thể thay đổi tùy theo năm db, nhưng tôi hy vọng bạn sẽ có được ý tưởng.

-1

thử điều này:

SELECT * FROM Members 
ORDER BY IF(x.MemberId = XXX, -1, ABS(x.MemberId)) 
+0

Điều này sẽ không cho kết quả nào .. –

0
SELECT * FROM `Members` WHERE `MemberID` = '[ID]' LIMIT 1 UNION SELECT * FROM `Members` 

này nên làm việc. Thử nghiệm trên cá thể cơ sở dữ liệu của tôi. ID được chọn luôn là đầu tiên.

+0

Điều này không đảm bảo cung cấp kết quả chính xác. – Magnus

0

Một giải pháp mạnh mẽ hơn, nếu bạn có nhiều bản ghi phải được thả nổi lên trên cùng hoặc nếu bạn có một thứ tự cụ thể cho nhiều bản ghi, hãy thêm cột ResultOrder vào bảng của bạn hoặc thậm chí một bảng khác MemberOrder (memberid, kết quả). Điền vào đơn đặt hàng kết quả có số lượng lớn và ...

Select m.* 
From Members m 
    Left Join MemberOrder mo on m.MemberID=mo.MemberID 
Order by coalesce(mo.resultorder, 0) DESC 
Các vấn đề liên quan