1

これは、実際のプロジェクトで解決しなければならない単純化されたタスクです。このプロジェクトでは、データは HSQLDB に格納されます。JDBC を使用してデータにアクセスします。

私は1つのテーブルを持っています:

name | flag
-----------
aa   | 1
bb   | 0
cc   | 1
dd   | 0
ee   | 1
ff   | 0

次のテーブルを取得するには、クエリを作成する必要があります。

name | flag
-----------
aa   | 1
cc   | 1
ee   | 1
ff   | 0
dd   | 0
bb   | 0

最終的なテーブルは、フラグ = 1 の行が取得されて昇順で並べ替えられ、フラグ = 0 の行が取得されて降順で並べ替えられ、結果が次々と結合されたようなものです。

フラグ = 1 の行とフラグ = 0 の行のソート順が逆になることに注意してください。

SQLで行うことは可能ですか?Java コードで 2 つのクエリを作成して ResultSet を手動でマージするのは好きではありません。

4

3 に答える 3

3

どの SQL でも、最も外側の order by のみが適用されるため、そこで実行する必要があります。

これがあなたのSQL方言で機能するかどうかはわかりませんが(申し訳ありませんが確認できません)、これを行うことができます

SELECT name, flag
FROM  'table'
ORDER BY
    flag desc,
    CASE WHEN flag = 1 THEN name ELSE '' END,
    CASE WHEN flag = 0 THEN name ELSE '' END DESC
于 2010-03-07T15:56:14.517 に答える
2

これを試して:

SELECT name, flag
FROM 'table'
ORDER BY flag desc, name

可能な限り、データベースに作業を任せてください。Javaでそのようなことをしないでください。「SQL ファースト」と考えてください。

于 2010-03-07T15:10:24.127 に答える
1

order by複数の列を取ることができます:

select *
from table
order by flag desc, name asc
于 2010-03-07T15:11:15.167 に答える