質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

4961閲覧

条件で指定した項目と同じ順番で取得項目をソートする方法

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2015/10/24 11:50

ご質問させていただきます。

質問内容は『条件で指定した項目と同じ順番で取得項目をソートする方法』です。

WHERE IN ('Tokyo','Hiroshima','Saga')
という検索条件で、
実際に実行してみると取得される順番は、Saga,Tokyo,Hiroshima などテーブルに格納されている順番で取得されます。

これをIN句で指定している通り Tokyo,Hiroshima,Sagaのような順番で取得するにはどういった方法があるのでしょうか。

使用DB SQLSERVER

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

prefecturesテーブルのprefecture'カラムからレコードを取得する場合を例に、
私が思いついた方法をご説明します。

ただ、手元にSQLServerがないため、MySQLで動作確認しております。
おそらくSQLServerでも動作すると思いますが、、

Before

sql

1mysql> SELECT 2 -> * 3 -> FROM prefectures 4 -> WHERE prefecture IN ('Tokyo', 'Hiroshima', 'Saga'); 5+------------+ 6| prefecture | 7+------------+ 8| Saga | 9| Tokyo | 10| Hiroshima | 11+------------+ 123 rows in set (0.00 sec)

After

sql

1mysql> SELECT 2 -> *, 3 -> CASE prefecture 4 -> WHEN 'Tokyo' THEN 0 5 -> WHEN 'Hiroshima' THEN 1 6 -> WHEN 'Saga' THEN 2 7 -> END sort_order 8 -> FROM prefectures 9 -> WHERE prefecture IN ('Tokyo', 'Hiroshima', 'Saga') 10 -> ORDER BY sort_order; 11+------------+------------+ 12| prefecture | sort_order | 13+------------+------------+ 14| Tokyo | 0 | 15| Hiroshima | 1 | 16| Saga | 2 | 17+------------+------------+ 183 rows in set (0.00 sec)

結果セットにsort_orderという余計なカラムを含みたくない場合、
以下のように1レベル上のSELECT文でラップします。

sql

1mysql> SELECT tmp.prefecture 2 -> FROM ( 3 -> SELECT 4 -> *, 5 -> CASE prefecture 6 -> WHEN 'Tokyo' THEN 0 7 -> WHEN 'Hiroshima' THEN 1 8 -> WHEN 'Saga' THEN 2 9 -> END sort_order 10 -> FROM prefectures 11 -> WHERE prefecture IN ('Tokyo', 'Hiroshima', 'Saga') 12 -> ORDER BY sort_order 13 -> ) AS tmp; 14+------------+ 15| prefecture | 16+------------+ 17| Tokyo | 18| Hiroshima | 19| Saga | 20+------------+ 213 rows in set (0.01 sec)

投稿2015/10/24 12:27

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問