• ベストアンサー

T-SQL 優先順によるデータの抽出

こんにちは。 あるテーブル"T_TABLE"に項目がC1(主キー)、C2が有り、データが以下のように登録されていた場合、 |C1|C2| ------| |BB|XX| ------| |AA|XY| ------| |DD|XZ| ------| とあった場合、 カラムC2に"XY"の値を含む行を第一に優先し、同カラムに"XZ"を含む行を第2に優先し、同カラムに"XX"を含む行を第3に優先して抽出するにはどのようにすればよいのでしょうか? 抽出するイメージは XY XZ XZ の順です。

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

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

こんな感じでどうでしょうか。 select C1, C2 from T_TABLE order by case when C2 = 'XY' then 1 when C2 = 'XZ' then 2 when C2 = 'XX' then 3 else 4 end, C1; SQL Serverの環境がないので動作確認はしていません。

関連するQ&A

  • T-SQL 動的に優先順ごとにデータを抽出する方法

    テーブル"t_table"にカラム"col1","col2"が有り、以下の ようにデータが登録されていると仮定して |col1|col2| --------- |aaaa|00gg| |aaaa|00dd| |aaaa|00ff| の場合は行"|aaaa|00ff|"のみ抽出。 |col1|col2| --------- |aaaa|00gg| |aaaa|00dd| の場合は行"|aaaa|00gg|"のみ抽出。 |col1|col2| --------- |aaaa|00dd| の場合は行"|aaaa|00dd|"のみ抽出。 ここで優先順の基準になるのはカラム"col2"に 登録されているデータであり、その優先順は 1.00ff 2.00gg 3.00dd です。 上記のように優先順による抽出はどのようなSQL を組めば実現できるのでしょうか?

  • SQLで優先順位が高いレコードを抽出する方法

    こんにちは。 あるテーブル"T_A"が有り、 そのテーブルにカラム"C1"、"C2"が有ります。 テーブル"T_A"にレコードが以下の用に登録されていると仮定します。 C1|C2 ----- AA|S AA|P BB|R BB|S CC|S ※C2に登録されている値は抽出する優先順位が有り、 R:1 P:2 S:3 Rが一番優先順位が高く、Sが優先順位が最も低いです。 この条件から、C1の値が同じレコードに対して、C2の優先順位が 最も高いレコードを抽出したいです。 欲しい結果↓ C1|C2 ----- AA|P BB|R CC|S

  • SQL構文を手助けしてください

    (1)のようなテーブルデータを(2)のように表示したいと思います。 AA,BB,CC,DD,EEは列名としてください。 (1) AA BB CC DD EE __________________________ 00 01 2004/01/01 XX YY 01 00 2004/01/01 XE YD 01 00 2004/01/05 XZ YZ 02 01 2004/01/10 X2 YE 02 02 2004/01/05 XW YI 02 02 2004/01/06 XF YL (2) AA BB CC DD EE __________________________ 00 01 2004/01/01 XX YY 01 00 2004/01/05 XZ YZ 02 01 2004/01/10 X2 YE 02 02 2004/01/06 XF YL <条件> AAとBBでキーを作り、CCのMAXの該当レコードを表示したい。 SELECT AA,BB,MAX(CC),DD,EE FROM TEST_TABLE GROUP BY AA,BB というような感じかなと思ったのですが、「GROUP BY の式ではありません」と怒られてしまいます。 どなたか簡単なやり方をご存知で無いでしょうか?

  • excel データ抽出方法

    こんいちは 列1と列2を比べて条件が一致したデータを抽出したいのですが,方法がわかりません。どなたかご存知のかた教えていただけないでしょうか? 列1  列2 aa   vv bb   dd cc   ff dd   aa ee   bb この場合aa,bb が一致する。

  • アクセスでデータ抽出

    A列に数字が、B列にデータ、C列には○と×が入っています。 A列は同じ数字が複数行あることもあり、 同じ数字でも○の時と×の時があります。 A列が同じ数字であるものを1グループとすると、C列の行ががすべて○のグループだけを抽出したいのです。 A列 B列 C列    123 aa  ○ 123 ab  ○ 123 zs  ○ 325 dd  ○ 325 dg  × 500 ff  ○ (上の場合、A列が123と500の行を抽出したい) どうしたらいいでしょうか? できればプログラムではなくクエリなどの操作でお願いします。

  • Accessで2つのカラムからユニークに抽出

    inusrとoutusrからメールアドレスの一覧として aa@aa.com bb@bb.com cc@cc.com dd@dd.com ee@ee.com が取得できるようにするためのSQLを教えてください。 select b,c from inusr left join outusr on b=c ? に似たようなSQLになると思います。 テーブルは以下のようなものです。 できれば上に書きましたSQLのようにbとcに分かれてしまうのではなく 1つの変数で結果を取得したいです。 inusr a b 1 aa@aa.com 2 bb@bb.com 3 aa@aa.com 4 dd@dd.com 5 ee@ee.com outusr a c 1 cc@cc.com 2 bb@bb.com 3 ee@ee.com 4 aa@aa.com 5 ee@ee.com

  • 多次元配列から値を抽出する方法

    Array ( [0] => Array ( [0] => Array ( [0] => Array ( [1] => XX ) ) [1] => AA [2] => BB [3] => CC [4] => DD ) ) 上記配列から値(XX)を1つの変数に取り出すにはどうすればよろしいでしょうか?

    • ベストアンサー
    • PHP
  • SQL 繰り返し項目を表示

    以下の条件 カラム「C1」が主キーのテーブルがAとB↓ テーブルA C1| --- AA| テーブルB C1|C2| -----| AA|11| AA|22| AA|33| とあった場合に、抽出結果を C1|C2 | ---------| AA|112233| にするためにはどのようなSQLを組めばいいのでしょうか?

    • ベストアンサー
    • MySQL
  • 【Access】SQL文教えてください!

    基本的な質問かもしれませんが・・・ テーブル名:test フィールド名:aa,bb,cc,dd,ee,ff (すべて数値型) aa~ccの合計からdd~ffの合計までの間を抽出したいのです。 どう書けばいいんでしょう?

  • SQL抽出順番

    SQLの質問なんですが 以下のSQLがあるとします。 select カラムA、カラムC from test_table where in ('AAA','BBB','CCC'); ※条件はカラムAの値を使用しています。 結果が AAA 111 BBB 222 CCC 333 と出るとします。 下のように条件を変えたとき where in ('BBB','CCC','AAA'); BBB 222 CCC 333 AAA 111 と抽出と変わるようにしたいのですが、 (in句の左から順番にレコードが抽出したいです) 何か良い方法はありますでしょうか? rowid順で出力されてしまうのでしょうか? 以上です。 よろしくお願いします。