2012-02-20 12 views

Respuesta

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

Esto debería funcionar y también le permitirá pide los artículos restantes por MemberID (Suponiendo xxx = 12 en este ejemplo)

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

Si la columna de la memberID no puede contener valores nulos, puede salirse con la que puede realizar un poco mejor.

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

¿Qué sucede si MemberID contiene valores negativos? – Magnus

+0

Supongo que probablemente sea una columna de identidad. Si contiene valores negativos, puede reemplazar el -1 con un valor nulo. Actualicé mi respuesta para ser más robusto y manejar los valores de memberID negativos. – JohnFx

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

La sintaxis puede variar dependiendo del db año, pero espero que usted consigue la idea.

-1

probar esto:

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

Esto no dará ningún resultado. –

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

Esto debería funcionar. Probado en mi instancia de base de datos. La identificación elegida siempre es lo primero.

+0

No se garantiza que esto dé el resultado correcto. – Magnus

0

Una solución más robusta, si tiene más de un registro que debe flotar hasta la parte superior, o si tiene un pedido específico para múltiples registros, es agregar una columna ResultsOrder a su tabla, o incluso otra tabla MemberOrder (memberid, resultorder). Llene el orden de los resultados con los números grandes y ...

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