こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL抽出順番

SQLの質問なんですが
以下のSQLがあるとします。

select カラムA、カラムC
from test_table
where in ('AAA','BBB','CCC');
※条件はカラムAの値を使用しています。

結果が
AAA 111
BBB 222
CCC 333
と出るとします。

下のように条件を変えたとき
where in ('BBB','CCC','AAA');
BBB 222
CCC 333
AAA 111
と抽出と変わるようにしたいのですが、
(in句の左から順番にレコードが抽出したいです)
何か良い方法はありますでしょうか?

rowid順で出力されてしまうのでしょうか?

以上です。
よろしくお願いします。

投稿日時 - 2009-01-24 13:36:24

QNo.4656723

困ってます

質問者が選んだベストアンサー

こんにちわ

考え方・視点を変えて、『長嶋さんが現役でサードを守ってるもん』
って思えば出来るますよ。
長嶋SQLです。

投稿日時 - 2009-01-28 21:48:39

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

UNION ALLを使えば出来ると思います。

SELECT col_a FROM SomeTable WHERE col_a IN ('AAA', 'BBB');

これを、

SELECT col_a FROM SomeTable WHERE col_a = 'BBB'
UNION ALL
SELECT col_a FROM SomeTable WHERE col_a = 'AAA';

こうするとBBBのレコードが先頭に来るはずです。
ただし、こういうことはSQLの仕事ではありません。
ホスト言語側で行うか、display_order列を追加する等、他の方法を考えるべきです。

投稿日時 - 2009-01-24 16:24:12

ANo.1

inはinです。順番を指定するものではありませんので無理でしょう。
AAA,BBB,CCCしかないことがはじめから分かっているのなら
order by decode(カラムA, 'BBB', 1, 'CCC', 2, 'AAA', 1, 9)
とかで無理やりできなくもないかもしれませんが。

ところで、
>where in ('AAA','BBB','CCC');
>※条件はカラムAの値を使用しています。
こんな書き方ありましたっけ?
where カラムA in ('AAA','BBB','CCC');
ではなくて?

投稿日時 - 2009-01-24 15:39:55

あなたにオススメの質問