我想要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
我想要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
您使用的是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
現在不能測試,所以我不確定這是否是有效的語法,但是可以添加「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
第二個選項可以正常工作,但比只有一個CASE需要更長的時間。我所做的是,我設置了Java中的CASE值,並且只將CASE WHEN放在ORDER BY子句中。它比應用程序中的舊SQL更完美,更快速。 – pringlesinn
我們可以做同樣的排序順序也是ASC或DESC?..我試過使用這個,但得到了意外的令牌ASC? –