SQLで質問です。


ORDER BY yomi
というふうに読み仮名でソートしているのですが、
特定の言葉だけ、ソートに関係なく一番上に表示したい場合、
どのような方法があるのでしょうか?

アオ
アカ
キイロ
ミドリ
ムラサキ

「ミドリ」はソートに関係なく、一番に表示させたい

ミドリ
アオ
アカ
キイロ
ムラサキ

という感じにしたいのです。宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/03/06 15:34:35
  • 終了:--

回答(4件)

id:llusall No.1

llusall回答回数505ベストアンサー獲得回数612006/03/06 15:51:12

ポイント20pt

オラクルですが、DECODEを使いました。

こんな感じでいかがでしょうか?


SELECT * FROM

(

SELECT TBL.*, DECODE(COLOR,’ミドリ’,0,1) AS WKCOL FROM XXXXXX TBL

)

ORDER BY WKCOL, COLOR

id:haring

うひょー。MYSQLです。すいません。

ありがとうございます。

2006/03/06 16:05:20
id:iken_jp No.2

iken_jp回答回数11ベストアンサー獲得回数02006/03/06 15:54:26

ポイント20pt

はじめまして。どんなDBを使用されているか不明なので一概にはいえませんが、ORDER BY のすぐ後ろに

yomi=’ミドリ’なら0 それ以外は1などと数値を設定して、その結果をソートのキーワードの最初にもってくればよいかと思います。

たとえばこんな感じです。iifとなっているところは各DBによって提供されている関数をしようしてください。

サンプル:Accessで作成

SELECT テーブル1.yomi, テーブル1.kana

FROM テーブル1 order by iif(テーブル1.yomi=’ミドリ’,0,1), テーブル1.yomi ;

id:haring

MYSQLを使っています。

再回答頂ければありがたいです。

2006/03/06 16:07:16
id:llusall No.3

llusall回答回数505ベストアンサー獲得回数612006/03/06 16:12:50

ポイント20pt

再回答です。


CASEを使いました。

次のようなSQLでいかがでしょうか?


SELECT * FROM

(

SELECT TBL.*,

CASE

WHEN COLOR = ’ミドリ’ then 0

ELSE 1

END WKCOL

FROM XXXXXX TBL

)

ORDER BY WKCOL, COLOR

id:haring

ありがとうございます。

私には結構難しいようです。

今は、こんな感じになっているのですが、

これを上記に当てはめると、どのようになりますか?

SELECT hana, yomi FROM kadan WHERE tane = ’$abc’ ORDER BY yomi

2006/03/06 16:39:25
id:iken_jp No.4

iken_jp回答回数11ベストアンサー獲得回数02006/03/06 17:46:46

ポイント20pt

MySQLを使用されているのであれば、以下でOKかと思います。また、’ミドリ’以外にも順番を設定する必要があるときには「when ’ムラサキ’ then 1」のように条件式を追加することで、例外的な処理ができると思います。その場合にはelseの数値を加算してください。

yomiが「ミドリ」と「ムラサキ」以外のレコードは2とすることでソート順が後ろになります。


Select

kadan.hana,

case kadan.yomi

when ’ミドリ’ then 0

when ’ムラサキ’ then 1

else 2

end sortkey

From

kadan

group by

sortkey, kadan.yomi

id:haring

ありがとうです。

無事に出来ました。

2006/03/06 18:11:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません