T-SQL Ordery Byの使い方

このQ&Aのポイント
  • T-SQLのOrder Byを使った順序付け方法についてご教示ください。
  • Table内のItemNOのうち、P、N、Qで始まる8件のデータを特定の順番で取得したいです。
  • Order Byの引数に8個のItemNOを指定して特定の順番で取得することは可能でしょうか。
回答を見る
  • ベストアンサー

T-SQL Ordery Byの使い方

Order By の使い方について教えてください。 (初心者です) 下のような順番で結果を求めています。 Item NO QTY P001     10 P002      8 P003     20 N001     13 N002     50 Q001     5 Q002    33 Q003     6 Table内のItemNOはA001から alphabetの順番でZ005まであるものとして、上記のP,N,QのItemNoのものだけをこの順番で求めたいのです。 もちろん、WHERE-clauseにはこの8件のItemNOの指定はしてあります。 Order by left(ItemNO, 1) DESC (またはASCE), substring(ItemNo, 2,4) ASC これでは、P,N,Qの順番にはなりません。 最初にP Number、次にN Number、最後にQ Numberを出すにはどうしたらいいのでしょうか。 Order Byの次に8個のItemNOを上記の順番に書いて指定することはできるのでしょうか。 Order Byには "Case When" が使えるとあるinternetで見たのですが、もし使えるとしたらこの順番をだすのに使えるのでしょうか。 ご指導お願いいたします。

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

こちらに回答しました。 http://okwave.jp/qa/q6665086.html

mspokemon
質問者

お礼

ありがとうございました。 別の場所も確認いたしました。

その他の回答 (1)

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

簡単なのは、P,N,Qを其々選んでUNIONでくっつける。パフォーマンス悪いしスマートで無い。 もうひとつはテーブル変数を使って、一時的に並べ順コードを割り当てて再抽出する。つまりストアドを作成する。 もうひとつは、テーブル変数ではなくサブクエリで並べ順をつける。この場合はCASEでPなら1、Nなら2、Qなら3と言うように新しい項目を作成し、元テーブルにする。それをさらに新しい項目順に selectする。

mspokemon
質問者

お礼

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

関連するQ&A

  • T-SQL: Order By の使い方

    (別のCategoryに載せてしまいましたがみつかりませんので、正しいCategoryで再掲載しています。) T-SQL: Order By の使い方について (初心者です) 下のような順番で結果を求めています。 Item NO QTY P001    10 P002      8 P003    20 N001    13 N002    50 Q001    5 Q002    33 Q003     6 Table内のItemNOはA001から alphabetと3桁番号の順番でY005まであるものとして、上記のP,N,QのItemNoのものだけをこの順番で求めたいのです。 もちろん、WHERE-clauseにはこの8件のItemNOの指定はしてあります。 Order by left(ItemNO, 1) DESC (またはASCE), substring(ItemNo, 2,4) ASC これでは、P,N,Qの順番にはなりません。 最初にP Number、次にN Number、最後にQ Numberを出すにはどうしたらいいのでしょうか。 Order Byの次に8個のItemNOを上記の順番に書いて指定することはできるのでしょうか。 Order Byには "Case When" が使えるとあるinternetで見たのですが、もし使えるとしたらこの順番をだすのに使えるのでしょうか。 ご指導お願いいたします。

  • SQLで

    order by を使って order by a asc,b desc,c asc ってしたいのですが、動きません。 どうしたらいいのでしょうか? よろしくお願いいたします。

  • order by asc,desc混合index

    order by で asc ,desc混合する場合indexが使用できないと思いますが、 たとえば、col1,col2,col3があったとして order by col1 asc, col2 desc, col3 asc ➡ order by col1 asc ,99999999 - col2 asc , col3 asc などのように、 col2を、カラムが取りうる最大値から引いてやることでascに置き換えても indexはかからないでしょうか?

    • ベストアンサー
    • MySQL
  • SQLiteManagerでOrder by DESCが使えない

    Webベース型のSQLite管理ソフトを使おうとしているのですが、 なぜか Order by " " Descを打ちこんでも、 Order by " " Asc として認識されます。 ネットで検索しても類似例は見つからなくて、困っています。 なにか解決策ご存じの方はいませんか?

  • Order by句でバインド変数を使うには?

    SQL文のOrder by句で2つのバインド変数を用いて、ソートする項目・ソート順を決めたいと思い、以下のようなSQLを作成いたしました。 Select row_Number() Over(Order by Case :ITEM When 'PJコード' then PJコード When '部署コード' then 部署コード end Case :LINE When '1' then DESC When '2' then ASC end .... バインド変数を直接Order by句に入れますと、結果は帰ってくるのですが、バインド変数の値がすべて無視されてデータが出力されます。 以上の理由より、Case文にてバインド変数の値を参照し、ソートする項目と順番を決めております。 上記のソースで実行しますとORA-00907:右かっこがありませんというエラーが表示されます。 2つ目のCase文(:LINE)を消し、最初のCase文だけを残して、並び順(DESC・ASC)を埋め込むと、実行される状態になります。 Oracleのバージョンは11gです。 ご回答よろしくお願いいたします。

  • 2個のカラムに対して、ORDER BYをする方法

    タイトルの通りなのですが picture_idとgrp_idは連番になっているのですが どちらか片方に対して、ORDER BYを行った場合 もう一方の連番が崩れてしまいます。 FROM区で、2つのカラムに対して ORDER BY ASC をする方法はあるのでしょうか? SELECT p.picture_id, p.grp_id, FROM hogehoge_info AS p WHERE ORDER BY p.picture_id ASC ORDER BY p.grp_id ASC 知っている方、いらっしゃいましたら ご教授お願い致します。

    • ベストアンサー
    • MySQL
  • SQL ORDER BY の結果について

    SQLのORDER BYの結果表示がおかしく困っています。 テーブル名:社員名簿 プライマリーキー無し (設定厳禁) フィールド: | 社員ID | 氏名 | 住所 | | VARCHER|VARCHER|VARCHER| | P1 | 田中 |東京都 | | P2 | 鈴木 |東京都 | | P10 | 高橋 |千葉県 | SQL文: SELECT * FORM 社員名簿 ORDER BY 社員ID 出力結果: | 社員ID | 氏名 | 住所 | | P1 | 田中 |東京都| | P10 | 高橋 |千葉県| | P2 | 鈴木 |東京都| 上記のような出力結果となってしまいます。 何か良い方法はありませんか? よろしくお願いします

  • order byで並び変えし最大値の項目の抽出方法ついて

    すみません。 order byで並び変えし最大値の項目のみ一意で抽出したいのですが 、 SELECT * from ta order by no,date1,date2; no | date1 | date2 ----+-------+------- 11 | 2008 | 0501 11 | 2008 | 0502 11 | 2008 | 0502 11 | 2008 | 0503 12 | 2008 | 0501 12 | 2008 | 0502 12 | 2008 | 0503 13 | 2008 | 0501 13 | 2008 | 0502 13 | 2008 | 0503 14 | 2008 | 0501 とあった場合、 no,date1,date2のorder by順番で並び変えし 11 | 2008 | 0503 12 | 2008 | 0503 13 | 2008 | 0503 14 | 2008 | 0501 とno項目に対し一つずつだけ出力したい場合どのようにしたらよいのでしょうか? LIMITとoffsetだと1項目分しか出力されず困っております。 SELECT * from ta where no in (select no from ta group by no limit 1 offset 0) order by no,date1 desc,date2 desc limit 1; 宜しくお願い致します。

  • Selectした時のレコードの取得順

    SQL Server2005 で開発しています。 Order by で並び替えてレコードをSelectする際に、 Order by の対象列データが同じ場合は、 どういった順番でレコードが取得できるのでしょうか? TableA No | Data1 | Data2   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500 (Noはクラスタ化PK) 例えば、上のようなテーブルから次のSQLを実行すると  (1)Select * From TableA ;  (2)Select * From TableA Order by Data1 Asc;  (3)Select * From TableA Order by Data1 Asc, No Asc;  (1)(2)(3)全て、次の順で返ってきました。   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500  しかし、(2)のSQLは、データによって  次の順で返ってくることがありました。   3| AAA | 300   1| AAA | 100   2| AAA | 200   4| ABC | 400   5| BBB | 500    1~3レコード目までは全てData1がAAAのレコードですが  特に指定していなくても、No(PK)の順になるのかと思っていました。    なお、レコードができた(Insert順)でもなさそうです。  この、順番は何で決まっているのでしょうか?  

  • PL/SQLにて、マスタから取得した値をORDER BY句に指定したい

    どなたかお判りになる方、ご教示ください。 ★やりたいこと PL/SQLにて、マスタから取得した値をORDER BY句に指定したい。 (例)以下のようなマスタがあるとします。 -------------------------- ソートマスタ SORT_MST ソート順 SORT_ORDER ソート項目 SORT_ITEM ソート種別 SORT_SBT -------------------------- この「ソートマスタ」の「ソート項目」には、以下のトランザクションテーブルの物理カラム名が格納されています。 -------------------------- トラン TRN 商品種別 ITM_SBT 商品コードITEM_COD 商品名 ITEM_NM 金額  ITM_AMN -------------------------- PL/SQLにて「ソートマスタ」から値取得後、「ITEM_COD ASC,ITM_AMN ASC」という文字列を作成し、「トラン」検索時にORDER BY句に指定したのですが、ORDER BY句が全く効いてくれません。 お忙しいところ恐れ入りますが、ご存知の方、よろしくお願い致します。

専門家に質問してみよう