2012-02-20 7 views

Odpowiedz

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

To powinno działać i będzie to również pozwalają zamówić pozostałe elementy przez memberID (Zakładając xxx = 12 w tym przykładzie)

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

Jeśli kolumna memberID nie mogą zawierać wartości null, można uciec z tego co może wykonać nieco lepiej.

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

Co jeśli identyfikator członkowski zawiera wartości ujemne? – Magnus

+0

Zakładam, że jest to prawdopodobnie kolumna tożsamości. Jeśli zawiera wartości ujemne, możesz po prostu zastąpić -1 wartością pustą. Zaktualizowałem swoją odpowiedź, aby była bardziej niezawodna i obsługiwać wartości ujemnych identyfikatorów. – JohnFx

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

Składnia może się różnić w zależności od yr db, ale mam nadzieję, że masz pomysł.

-1

spróbuj tego:

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

To nie daje żadnego wyniku. –

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

to powinno działać. Przetestowano na mojej instancji bazy danych. Wybrany ID jest zawsze pierwszy.

+0

To nie gwarantuje poprawnego wyniku. – Magnus

0

Bardziej niezawodne rozwiązanie, jeśli masz więcej niż jeden rekord, który musi być przeniesiony na szczyt, lub jeśli masz określoną kolejność dla wielu rekordów, to dodaj kolumnę ResultsOrder do tabeli lub nawet innej tabeli MemberOrder (memberid, resultorder). Wypełnij resultorder z dużymi liczbami i ...

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