2011-10-31 8 views
5

ケースステートメントをORDER BYしたいですか?どうしたらいいですか?今テストする位置に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

2番目のオプションはうまくいきますが、1つのCASEでより長くかかります。私がしたことは、JavaでCASE値を設定し、CASE WHENをORDER BY節に置いただけです。これは、アプリケーション上にあった古いSQLより完全に速く動作しました。 – pringlesinn

+0

私たちはASCやDESCも同様に並べ替えることができますか?..私はこれを使ってみましたが、予期しないトークンASCを取得しましたか? –

0

ないので、私は、これは有効な構文であるかどうかわからないんだけど、あなたはそれに「AS」を追加することができますか?

+0

を試してみてください。 – pringlesinn

+0

構文エラーまたは単に注文しない? – digitaljoel

+0

は 'as'を認識しません – pringlesinn