2011-10-31 30 views
5

Quiero ORDENAR por la declaración de caso, ¿es posible? ¿Cómo puedo hacerlo?PEDIDO POR "columna CASE" en JPA

SELECT new com.systemname.to.UserDataHolder(u.userId, 
CASE WHEN (u.place.cityId = :cityId) THEN 1 WHEN (u.place.stateId = :stateId) THEN 2 ELSE 3 END) 
FROM User u 
ORDER BY u.userId DESC 

Respuesta

5

¿Qué proveedor de JPA estás utilizando?

intento,

SELECT u.userId, 
(CASE 
    WHEN (u.place.cityId = :cityId) THEN 1 
    WHEN (u.place.stateId = :stateId) THEN 2 
    ELSE 3 END) as myNum 
FROM User u 
ORDER BY u.userId, myNum DESC 

o,

SELECT new com.systemname.to.UserDataHolder(u.userId, 
CASE 
    WHEN (u.place.cityId = :cityId) THEN 1 
    WHEN (u.place.stateId = :stateId) THEN 2 
    ELSE 3 END) 
FROM User u 
ORDER BY u.userId, CASE 
    WHEN (u.place.cityId = :cityId) THEN 1 
    WHEN (u.place.stateId = :stateId) THEN 2 
    ELSE 3 END DESC 
+0

La segunda opción funciona bien, pero lleva más tiempo de lo que debería con solo un CASO. Lo que hice fue configurar el valor de CASE en Java y poner el CASO CUANDO solo en la cláusula ORDER BY. Funcionó perfectamente y más rápido que el SQL anterior que estaba en la aplicación. – pringlesinn

+0

¿podemos hacer lo mismo con el orden de clasificación también ASC o DESC? .. Intenté usar esto pero obtuve Token Inexpected ASC? –

0
No

en condiciones de probar en este momento así que no estoy seguro si esto es una sintaxis válida, pero se puede añadir una "AS" a ella?

SELECT new com.systemname.to.UserDataHolder(u.userId, 
CASE 
    WHEN (u.place.cityId = :cityId) THEN 1 
    WHEN (u.place.stateId = :stateId) THEN 2 
    ELSE 3 END as myNum) 
FROM User u 
ORDER BY u.userId, myNum DESC 
+0

No funciona. – pringlesinn

+0

error de sintaxis o simplemente no ordena? – digitaljoel

+0

no reconoce 'como' – pringlesinn

Cuestiones relacionadas