2011-10-31 96 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