- PR -

フィールド値でソート順を変更

1
投稿者投稿内容
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2005-10-20 19:00
データベース( Oracle9i )からの取得時に、
あるフィールド("no")の値がNULLかどうかで、ソートする[フィールド]を替えたいと思っています。

name | job | no
------------------
AAA | BBB | 3
AAA | DDD | 1
AAA | CCC | 2
------------------
BBB | AAA | null
BBB | DDD | null
BBB | CCC | null
------------------
CCC | DDD | null
CCC | EEE | 1
CCC | AAA | null
CCC | BBB | 3

というデータがあるとします。("name"がキーです。)

"no"がNULLではない場合: "no" の昇順に取得(name='AAA')
"no"がNULLの場合:    "job"の昇順で取得(name='BBB')


"CCC"のようなデータの場合は、以下のような結果で取得したいと思っています。
"no"がNULLでないレコードを先に昇順で、
次に"no"がNULLのレコードを"job"の昇順で取得

CCC | EEE | 1
CCC | BBB | 3
CCC | AAA | null
CCC | DDD | null


今、以下の2つのSQLを順になげて結果をくっつけています。
コード:
select name,job,no from TEST where name='○○○'
                               and no IS NOT NULL
                          order by no;

select name,job,no from TEST where name='○○○'
                               and no IS NULL
                          order by job;


これを1つのSQL文を投げたいのですが、
どのように書けばいいでしょうか?

よろしくお願いします。m(_ _)m
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2005-10-20 19:22
すみません。
解決しました。

フィールド("no")の値がNULLにこだわり過ぎていて、
WHEREに"IS NOT NULL"をつける条件がいるとばかり思ってました。><
単純に、以下のSQLでできました。
コード:
select name,job,no from TEST where name='○○○'
                          order by no,job;

失礼しました。m(_ _)m
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-10-21 11:55
order byでソートした時に
Oracleはnullを一番大きいとみなしますからねえ
(SQL Serverやaccessは一番小さいとみなすらしいです)


OracleSQLパズル
http://oraclesqlpuzzle.hp.infoseek.co.jp

[ メッセージ編集済み 編集者: 重蔵 編集日時 2005-10-21 11:58 ]
1

スキルアップ/キャリアアップ(JOB@IT)