2011-10-31 93 views
5

我想要ORDER BY case语句,有可能吗?我该怎么做?ORDER BY“CASE专栏”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 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 

,或者

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值,并且只将CASE WHEN放在ORDER BY子句中。它比应用程序中的旧SQL更完美,更快速。 – pringlesinn

+0

我们可以做同样的排序顺序也是ASC或DESC?..我试过使用这个,但得到了意外的令牌ASC? –

0

现在不能测试,所以我不确定这是否是有效的语法,但是可以添加“AS”吗?

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

它不工作。 – pringlesinn

+0

语法错误或只是不命令? – digitaljoel

+0

不能识别'as' – pringlesinn