SQLでTESTテーブルからTYPEごとにソートした結果を抽出する方法

このQ&Aのポイント
  • SQLを使ってTESTテーブルからTYPEごとにソートした結果を抽出する方法を紹介します。結果は2,1,3の順番で表示されます。
  • TESTテーブルのTYPE(1,2,3)を抽出して、2,1,3の順番に並べて表示するSQLの書き方を教えてください。
  • SQLがわかりませんが、TESTテーブルからTYPEごとにソートした結果を表示する方法を教えてください。
回答を見る
  • ベストアンサー

SQLがわかりません。

以下のTESTテーブルから以下の結果を表示するようなSQLを教えて頂けないでしょうか。 TESTテーブルでTYPE(1,2,3)を抽出して、2,1,3の順番にして それぞれのTYPEごとにDBIDでソートをしたいです。 どうかよろしくお願いいたします。 table TEST DBID | NAME | TYPE ------------------------------- 1 | A | 1 2 | B | 2 3 | C | 3 4 | D | 4 5 | E | 1 6 | F | 2 7 | G | 3 8 | H | 4 9 | I | 1 10 | J | 2 結果 DBID | NAME | TYPE ------------------------------- 2 | B | 2 6 | F | 2 10 | H | 2 1 | A | 1 5 | D | 1 9 | G | 1 3 | D | 3 7 | G | 3

  • Oracle
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
noname#212058
noname#212058
回答No.2

DECODE を使うとか。 SELECT * FROM TEST WHERE TYPE IN (1,2,3) ORDER BY DECODE(TYPE, 1, 2, 2, 1, 3, 3, 4), DBID

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.1

単純なSQLだとその順番で取り出すのは無理でしょう。 無理矢理でいいなら (SELECT * FROM TEST WHERE TYPE = 2 ORDER BY DBID) UNION ALL (SELECT * FROM TEST WHERE TYPE = 1 ORDER BY DBID) UNION ALL (SELECT * FROM TEST WHERE TYPE = 3 ORDER BY DBID) ; って感じでしょうか。

alleniverson3
質問者

お礼

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

関連するQ&A

  • SQLで集計キー毎の最大値を求めたい

    下記の品番テーブルを元に抽出結果「会社別発売日最新品番一覧」を得るためのSQLがわからなくて困っています。どなたかアドバイスいただけないでしょうか。よろしくお願いします。 品番テーブル 会社 品番 発売日 -------------------------- 1 A 2/11 1 B 8/18 2 C 3/10 3 D 7/14 3 E 8/10 3 F 9/11 4 G 1/31 4 H 6/25 抽出結果「会社別発売日最新品番一覧」 -------------------------- 会社 品番 発売日 1 B 8/18 2 C 3/10 3 F 9/11 4 H 6/25

  • SQLを教えてください!!

    テーブルAとテーブルBがあり、両方に存在しないものを抽出してエラーとする処理を行いたいのですが、 どういうSQlを書いたらいいのか教えてください。 下記例としてテーブルにデータがあったとしたら、結果として 004 商品D 005 商品E 006 商品G というデータを抽出したいのですが・・ テーブルA             テーブルB -------------        ----------------------- コード  商品名 NO コード   商品名 001 商品A        1 001 商品A 002 商品B        2 001  商品A 003 商品C        3 002   商品B 004 商品D        4 003 商品C 006 商品G        5 003 商品C                 6 005 商品E

  • SQL

    以下のようなテーブルがあり、 区分に2、3、4があれば抽出しないという SQL文を教えていただければと思います。 (SQLSERVER2000を使用しています) 名称    | 区分 テストa |  1 テストa |  1  テストa |  2 テストb |  1 テストb |  1 テストc |  1 テストc |  2 テストc |  3 テストc |  4 テストc |  5 テストd |  1 テストd |  1 テストd |  5 テストd |  5 テストd |  5 例でいくとテストaは区分が1、1、2で 2がはいっているので抽出しない。 テストbは1、1なので抽出する。 テストcは1、2、3、4、5で2、3、4がはいっている ので抽出しない。 テストdは1、1、5、5、5なので抽出する。 つまり結果としては テストaとテストdが抽出されるということです。 質問もままならないほどSQL初心者のため、 どうかご回答いただきたいと思います。 よろしくお願いします!!

  • 絞込みする時のSQLの書き方

    お世話になります。 絞込みする時のSQLの書き方について教えてください。 具体的には テーブル名tbl01,フィールド名f01,f02とした場合 1.f01もしくはf02にAという文字を含むレコードを抽出。 SQL = "select * from tbl01 where f01 like '%A%' or f02 like '%A%'" 2.続いて、1で抽出したデータからf01もしくはf02にBという文字を含むレコードを抽出するSQL文 SQL = ????? あくまでも、1と2を満たす条件を1つのSQL文で表す方法です。一旦、1の結果をワークテーブルに落とし、そこから2だけのSQL文を実行するわけではありません。

  • オラクルの外部結合について

    仮にテーブル類をこのように設定します テーブル  項目 ------------------- マスタ111...a,b,c,d,e マスタ222...f,g,h,i,j  ------------------- ※ マスタ111とマスタ222のKEYは(a = f,b = g)とします。 SQLの抽出にて、a~jまでの全ての項目をマスタ111 に存在する全てのデータのみ抽出したい (マスタ222に紐つくデータがない場合はf~j項目は空白として抽出) と思い、以下のような下のようなSQLとしてみましたが、これだとマスタ222に紐つくデータがない場合は抽出の対象外となってしまいました。 -------------------------- SELECT A.a      A.b      A.c      A.d      A.e      B.f      B.g      B.h      B.i      B.j FROM マスタ111 A,マスタ222 B WHERE A.a = B.f(+) AND A.b = B.g(+) -------------------------- マスタ222に紐つくデータがないマスタ111のデータも抽出したい場合は、どのようなSQLにしたら良いでしょうか? 宜しくご教授下さい。お願い致します。

  • SQL文

    以下のようなテーブルがあり、 区分に金額1、金額2、金額3、金額4どれかに金額があれば抽出するという SQL文を教えていただければと思います。 (SQLSERVER2008を使用しています) 名称  | 日付 | 金額1 | 金額2 | 金額3 | 金額4 テストa |  1  | 50000 | 金額2 | 金額3 | 金額4 テストb |  1  | 金額1 | 50000 | 50000 | 金額4 テストc |  2 | 金額1 | 金額2 | 50000 | 金額4 テストd |  1 | 金額1 | 金額2 | 金額3 | 金額4 テストe |  1 | 金額1 | 金額2 | 金額3 | 50000 テストf |  1 | 50000 | 金額2 | 50000 | 金額4 テストg |  2 | 50000 | 金額2 | 金額3 | 金額4 テストh |  3 | 金額1 | 金額2 | 金額3 | 金額4 テストy |  4 | 金額1 | 50000 | 金額3 | 金額4 テストj |  5 | 金額1 | 50000 | 金額3 | 金額4 テストk |  1 | 金額1 | 金額2 | 金額3 | 50000 テストl |  1 | 50000 | 50000 | 50000 | 金額4 テストm |  5 | 金額1 | 金額2 | 50000 | 金額4 テストd |  5 | 金額1 | 金額2 | 金額3 | 金額4 テストd |  5 | 金額1 | 金額2 | 金額3 | 50000 例でいくとテストdとテストhの金額1、2、3、4には金額が はいっていないので結果はそれ以外ということです。 また、結果はすべての項目を表示させたいと思っております。 (テストdとテストh以外のレコードの名称 日付 金額1 金額2 金額3 金額4 を表示する) SQL初心者のため、 どうかご教授いただきたいと思います。 よろしくお願いします!!

  • データがあれば○○なければのSQL

    基本的なことなのかもしれませんが・・・ AとBというテーブルがあり、あるタイミングでAを元にBを作成します。つまりBはデータがある場合とない場合があります。また、2つは関連番号で紐づいています。 Aテーブルを抽出したい時に、抽出条件は以下です。 ・Bテーブルのステータスが1であれば抽出 ・Bテーブルのステータスが0であれば非抽出 ・Bテーブルにデータがなければ抽出 INNER JOINだとデータがない時に抽出できないし、 WHERE句にCASE句を入れればいいのかなと思いましたが、テーブルにデータがあればなんて条件書けないしで詰まりました。 SELECTした結果に対して条件つけて抽出する手も思いつきましたが もっと美しいSQLがあれば教えてもらえないでしょうか。 環境はSQLServerです。よろしくお願いします。

  • SQLの書き方

    select A.NO, A.NAME, count(B.TEN) FROM T1 A, T2 B GROUP BY A.NO ORDER BY 3 DESC 結果として以下のようになってほしいのですが、どのようにSQLを書けばよいのでしょうか? 結果 NO | NAME | TEN ---+------+----- 3 + 上村 + 40 1 + 吉田 + 11 2 + 浅野 + 6 T1テーブル NO | NAME ---+-------- 1 + 吉田 2 + 浅野 3 + 上村 T2テーブル NO | TEN ---+-------- 1 + 10 2 + 5 3 + 0 1 + 1 2 + 1 3 + 40

  • ACCESSクエリでの結合の仕方・・・SQL文かも

    ACCESS 2003を使用しています。 テーブルA テーブルB の2テーブルでクエリを作っています。 結合的には・・・ テーブルAのフィールドX ⇔ テーブルBのフィールドY です。 これで2テーブルに共通する一致データのみ抽出はできるのですが、 2テーブルに共通する一致データに加えて、 2テーブルの不一致データも一緒にクエリ表示されるようにしたいのです。 欲しいのは抽出イメージは、以下のような感じのクエリ結果です。 テーブルA:フィールドX|テーブルBのフィールドY a             |(空) (空)           |b c             |c d             |(空) (空)           |e f              |f  g             |(空) h             |h おそらく、SQL文を書く必要があるとは、想像できるのですが・・・ どなたか、ご教授いただけると助かります。 よろしくお願いします。

  • SQL削除条件について

    初歩的な質問で大変恐縮ですが、ご教授願います。 以下の二つのテーブルがある場合、1回のSQLで削除する方法を教えてください。 <Aテーブル> --------------- ID 削除フラグ A 0 B 1 C 0 D 1 E 0 E 0 E 0 F 1 F 0 F 1 G 1 G 1 G 1 <Bテーブル> ID ----- A B E F G <削除後のAテーブル> --------------- ID 削除フラグ A 0 C 0 D 1 E 0 E 0 E 0 F 1 F 0 F 1 ※Aは削除フラグが0のため削除されない。 ※C,DはIDが一致しないため削除されない。 ※E,Fは削除フラグが全て1でないため削除されない。 IDが一致していて、削除フラグが全て「1」である場合、Aテーブルを削除する。 としたいのですが、半日悩んでもうまくいきません。 どうかお願い致します。