2012-02-20 7 views

risposta

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

Questo dovrebbe funzionare e vi permetterà anche di ordinare le voci rimanenti da MemberID (Assumendo xxx = 12 in questo esempio)

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

Se la colonna memberID non può contenere valori nulli, è possibile ottenere via con questo, che potrebbe svolgere un po 'meglio.

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

Cosa succede se MemberID contiene valori negativi? – Magnus

+0

Suppongo che sia probabilmente una colonna di identità. Se contiene valori negativi, puoi semplicemente sostituire il -1 con un valore null. Aggiornato la mia risposta per essere più robusto e gestire i valori di memberID negativi. – JohnFx

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

La sintassi può variare a seconda yr db, ma spero che si ottiene l'idea.

-1

provare questo:

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

Questo non darà alcun risultato .. –

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

Questo dovrebbe funzionare. Testato sulla mia istanza di database. L'ID scelto è sempre il primo.

+0

Questo non è garantito per dare il risultato corretto. – Magnus

0

Una soluzione più robusta, se hai più di un record che deve essere flottato verso l'alto, o se hai un ordine specifico per più record, è quello di aggiungere una colonna ResultsOrder alla tua tabella, o anche un'altra tabella MemberOrder (memberid, resultorder). Riempi il risultato con numeri grandi e ...

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