2011-10-31 3 views
5

사례 명세서를 주문하고 싶습니다. 가능합니까? 내가 어떻게 해?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 

답변

5

어떤 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, CASE 
    WHEN (u.place.cityId = :cityId) THEN 1 
    WHEN (u.place.stateId = :stateId) THEN 2 
    ELSE 3 END DESC 
+0

두 번째 옵션은 정상적으로 작동하지만 하나의 CASE 만 있으면 오랜 시간이 걸립니다. 내가 한 것은 Java에서 CASE 값을 설정하고 ORDER BY 절에만 CASE WHEN을 넣었습니다. 그것은 응용 프로그램에 있던 이전 SQL보다 완벽하고 빠릅니다. – pringlesinn

+0

우리는 정렬 ASC 또는 DESC와 동일한 작업을 수행 할 수 있습니까? ..이 사용하려고했지만 예기치 않은 토큰 ASC가 있습니까? –

0
지금 내가이 유효한 구문은 있는지 확실하지 않습니다 테스트 할 수있는 위치에

하지,하지만 당신은 "있는 그대로"여기에 추가 할 수 있습니다?

+0

시도,

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 

나. – pringlesinn

+0

구문 오류가 있거나 주문하지 않았습니까? – digitaljoel

+0

은 'as'를 인식하지 못합니다. – pringlesinn