我想要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? –