• ベストアンサー

問い合わせ結果のソートについて

問い合わせ結果のソート順を任意で指定することは可能でしょうか?ご教示ください。 たとえば、LOCATIONとフィールドの値に下記の値があったとして、 'NY' 'TKY' 'LDN' ORDER BY LOCATION でソートすると 'LDN' 'NY' 'TKY' となると思います。これを 'NY' 'TKY' 'LDN' といった具合に任意の順番で問い合わせ結果を並べることは可能でしょうか? よろしくお願いいたします。

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

  • ベストアンサー
回答No.3

もし、NY、TKY、LDNなどの種類の数がきまっているなら SELECT DECODE (LOCATION, 'NY','1', 'TKY','2','LDN','3') "LOCATION_ORDER" FROM TABLE ORDER BY LOCATION_ORDER という形でSQLが発行できます。 が、LOCATIONの数が不定の場合、 取得後ソートするしかないと思います。

n-nen
質問者

お礼

ありがとうございます。 今はLOCATIONの数は定数ですが、今後の変更も考えてコードテーブルで管理することにしました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • GoF
  • ベストアンサー率37% (34/91)
回答No.2

フィールドの内容がリスト化されていて将来にわたり普遍ならば ORDER BY DECODE( ~ ) / CASE ~ ORDER BY 自作関数( ~ ) するか、メンテナンスが入るような情報なら 所在地? マスタを作って ソート情報を載せるか という感じではいかがですか?

n-nen
質問者

お礼

ご回答ありがとうございました。 今後ともよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • Ryokucha
  • ベストアンサー率25% (115/450)
回答No.1

無理だと思います。 ソートはあくまでも文字列の比較から結果を出しますので概念から外れています。 必要ならば、出力順のフィールドを作ってソートするしかないと思います。

n-nen
質問者

お礼

ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ビット単位のソート

    あるtextフィールドに '10010000' のように1と0で構成されたものがあります。 このフィールドにたいして、ソート(order by)を行いたいのですが、 何桁目が1のものを上位に、のようなソートを行いたいと思っています。 任意の桁の値だけ取り出せないかと、 型変換、フォーマットや算術演算を使ってみましたがうまくできませんでした。 たとえば '10010000' から5桁目の値 '1' のみを取り出す方法です。 ソートで使用するのが目的です。 わかります方いらっしゃいましたら、よろしくお願いいたします。

  • GROUP BYで集約されるときのソートを変えたい

    GROUP BYで集約されるときのソートを変えたい MySQLの5.1を使用しています。 テーブル"tbl"には、"no","id","score"の3つのフィールドがあり、 "no"は主キーです。 +---+----+-------+ | no | id | score | +---+----+-------+ | 1 | 10 | 10002 | | 2 | 10 | 10000 | | 3 | 10 | 10008 | | 4 | 11 | 10004 | | 5 | 12 | 10006 | +---+----+-------+ 上記の表から、 scoreの値が高い順にグループ化してソートしたいのですが、 以下のSQL文ではscoreが最初に登録されたものに集約されてからグループ化されてソートしてしまうため、 思い通りの結果が得られずに困っています。 ↓具体例 SELECT no, id, score FROM tbl ORDER BY score DESC GROUP BY id; +---+----+-------+ | no | id | score | +---+----+-------+ | 5 | 12 | 10006 | | 4 | 11 | 10004 | | 1 | 10 | 10002 | +---+----+-------+ ↓欲しいソート順 +---+----+-------+ | no | id | score | +---+----+-------+ | 3 | 10 | 10008 | | 5 | 12 | 10006 | | 4 | 11 | 10004 | +---+----+-------+ テンポラリテーブルはなるべく使用せずソートしたいのですが、 このような事は可能なのでしょうか? ご存知の方がいらっしゃいましたら教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SELECT文のソートについて

    SQLのSELECT文で抽出した列Aの値が、例えば1~12であるとして、それを4~12、1~3という具合にソートしたいのですがやり方がわかりません。 ORDER BY句を使えばいいのか、それとも全く別の方法を使うのか教えてください。 よろしくお願いします。

  • datetime型でのソート

    初心者のため、初歩的な質問か判りませんが宜しくお願いします。 datetime型のフィールドに下記のようにまちまちの年月日、時間のデーターが入っているのですが、年月日は無視して、時間だけでソートを したいのです。 例えば下記のようなデータがあるとして 1998/3/21 15:12 2007/5/5 12:00 1980/1/1 8:00 これを普通に並べ替える(order by フィールド名 asc)と下記のようになるのですが 1980/1/1 8:00 1998/3/21 15:12 2007/5/5 12:00 これを年代は関係なく時間だけで、下記のように並べ替えたいのです 。 1980/1/1 8:00 2007/5/5 12:00 1998/3/21 15:12 どうすれば良いのか、教えて頂けないでしょうか?

  • SELECT結果を任意の順で並べたい

    こんなデータベースを構築しています。 "data"テーブルの中に "region" 列があり、"○○県○○市"という地域名が収められています。 ここから、DBに存在する都道府県名だけを北から順番に列挙したいのです。 普通に distinct region + order by すると、丸ごと文字コード順に並んでしまいます。 そこで、以下のような都道府県名テーブルを用意してみました。 >num列(連番)、name列(北から順番に都道府県名が入っている) dataテーブルの問い合わせ結果をnameとlike演算して、出てきたものをnumでソートをかければOKかと思ったのですが、MySQLが4.0のため副問い合わせが使用できず、撃沈しました。(レンタルサーバでバージョンアップが出来ないのです) 何か良い方法はないものでしょうか・・・。

    • ベストアンサー
    • MySQL
  • ArrayListなどのソート

     いつもお世話になっています。ArrayListなどをソートする際に、Comparatorインターフェースを実装したクラスを利用して、辞書順や数値順などでソートすることは出来ますよね。これを任意の単語の順番にソートするにはどのようにすればよいのでしょうか。つまり、下記例において、文字列順ではなくて、"ONE", "TWO", "THREE", "FOUR"の順番にソートしたいのです。 ArrayList list = new ArrayList(); list.add("THREE"); list.add("ONE"); list.add("FOR"); list.add("TWO");  やはりcompare()メソッド内で総当り的に比較するしかないのでしょうか。  開発環境はJDK1.4です。事情により返答が遅れてしまうかもしれませんが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • 検索のソートについて

    以前phpのカテゴリ内で以下のようなQ&Aをみつけましたが、まったく同じ状況で使用する言語がperlの場合どのようにすればいいのでしょうか?どなたか教えて下さい。 "PHP+MySQLを勉強中です。 例えば、商品テーブルに商品ID、商品名、価格、在庫数の4つのフィールドがあって、その表の各名称をクリックするとソート(例:オークションなどで現在価格をクリックするとソートなど[select * from 商品 order by 価格 asc])できるスクリプトをどのように作成すればよいか教えて下さい。" "shohin.phpで商品一覧を表示するとして、フィールド各名称のリンクを <a href="shohin.php?sort=1">商品ID</a><a href="shohin.php?sort=2">商品名</a>・・・ のようにします。" あとはswitch文を使ってget値(sort=の値)別にクエリーを変えるだけです。

    • ベストアンサー
    • Perl
  • 検索結果内でのソート 及び ソート順に番号を振る方法

    よろしくお願いします。 下記のようなExcelシートがあります。 ID 検索番号 順番 データ 1 44 9252 いわし 2 8 9256 えりんぎ 3 37 9258 おちゃづけ 4 37 9258 おにぎり 5 3 9284 まつたけ 6 44 9253 うに 検索番号フィールドとデータフィールドの関係は、別のテーブルで保持している検索番号に対応するデータと親子関係のようになっています。順番フィールドには、同じ検索番号のデータ間で優先順位を決めるためのフィールドにしたいと考えています。 順番フィールドには、ExcelのCODE関数で文字コードを取得し順番を決めようとしたのですが、先頭文字のみのコード化ですので、2文字目以降が異なる場合上記ケースではうまくいきませんでした。 長々と書いてしまいましたが、教えていただきたい事は下記の通りです。 ・検索番号による結果に対し五十音順に数字をふる方法 よろしくお願いします。

  • ソート(大文字・小文字を区別しない方法)

    Oracle10gとOracle9を利用しています。 SQL文でソートした結果を出力したいのですが、頭文字が大文字・小文字が混在しています。 ORDER BY句を使ってソートをすると、大文字でソート、小文字でソート という順番で並ぶと思いますが、大文字・小文字を区別せずにソートさせたいと考えています。 大文字・小文字を区別せずにソートさせる方法はありますか? ------------- TABLE1 ------------- ID NAME ------------- 001 Book 002 bar 003 boy 004 Byte ------------- SELECT NAME FROM TABLE1 ORDER BY NAME; ↓実行結果 ------------- Book Byte bar boy ------------- ↓出力した並び順 ------------- bar Book boy Byte ------------- ※「ALTER SESSION ST NLS_SORT=BINARY_CI」としてからソートすればOKという  情報がネットで見つかりましたが、Webアプリの中で実行させたいため、設定  は変えずに行いたいと思っています。可能ですか? よろしくお願いいたします。

  • DataGridViewのソートを止めたい

    いくつか同じ質問は見受けられましたが、自分の環境ではどれも解決に至っていなく困っていますので、質問させてください。 DataGridViewのDataSourceにDataTableを設定して使っています。 このDataGridViewは、編集もできソートもできます。ただ、ソートは、ヘッダをクリックした時など、ユーザーが意図したときだけ起きて欲しく、例えばソート列の値を編集したときなどに、勝手に位置が変わってしまします。 これを、止める方法はないのでしょうか。しかも、それまでに任意のソートを繰り返した後の、編集を加える直前の順番を保ったままです。 ソートを解除するという方法がありましたが、ユーザーが編集直前までに整えた順番をクリアして、最初の状態に戻してしまいます。それでは、都合が悪いのです。 本当に困り果てています。どうか、分かる方教えていただけませんか?

このQ&Aのポイント
  • 防犯カメラの作動周波数帯域が2.4GHzに設定されているため、e-Meshルーターを2.4GHzで固定する方法について教えてください。
  • e-Meshルーターのバンドステアリング機能を使用して、2.4GHzバンドに固定する方法について教えてください。
  • エレコム株式会社の製品であるe-Meshルーターを2.4GHzに固定する方法について教えてください。
回答を見る