2012-02-20 26 views

回答

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

這應該工作,它也將允許您訂購的其餘項目通過MEMBERID(假設在這個例子XXX = 12)

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

如果MEMBERID列不能包含空值,你可以逃脫這個可能執行略勝一籌。

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

如果MemberID包含負值會怎麼樣? – Magnus 2012-02-20 20:11:49

+0

我假設它可能是一個標識列。如果它包含負值,則可以用空值替換-1。更新了我的答案,使其更健壯,並處理負的memberID值。 – JohnFx 2012-02-20 20:12:34

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

的語法可能因年而異分貝,但我希望你的想法。

-1

試試這個:

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

這不會給任何結果.. – 2016-04-26 10:21:21

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

這應該工作。測試我的數據庫實例。選定的ID始終是第一位。

+0

這不能保證給出正確的結果。 – Magnus 2012-02-20 20:25:34

0

一個更強大的解決方案是,如果您有多個記錄必須浮動到頂部,或者您有多個記錄的特定訂單,則需要向您的表或其他表中添加一個ResultsOrder列MemberOrder(memberid,resultorder)。用大數填充結果序號和...

Select m.* 
From Members m 
    Left Join MemberOrder mo on m.MemberID=mo.MemberID 
Order by coalesce(mo.resultorder, 0) DESC