Unionの結果全体をOrder By したい。

このQ&Aのポイント
  • SQLServerのバージョンは2000だったと思います。
  • 下記のSQLの結果をWEEK_KB,TIME_KB,SPAN_CDでソートするにはどのようにしたら良いのでしょうか?
  • 色々考えたのですが、どうしてもわかりませんでした。よろしくお願いいたします。
回答を見る
  • ベストアンサー

Unionの結果全体をOrder By したい。

いつもお世話になっています。 下記のSQLの結果をWEEK_KB,TIME_KB,SPAN_CDでソートするには どのようにしたら良いのでしょうか? 色々考えたのですが、どうしてもわかりませんでした。 よろしくお願いいたします。 SQLServerのバージョンは2000だったと思います。。。。 SELECT '2', A.WEEK_KB, A.TIME_KB, A.SPAN_CD, A.JUGYO_CD, B.JUGYO_MEI, ADD_FLG , UPD_FLG , DEL_FLG FROM table1_wk As A INNER JOIN 授業マスタ As B ON A.JUGYO_CD = B.JUGYO_CD WHERE ID='aaa' UNION SELECT '1', C.WEEK_KB, C.TIME_KB, C.SPAN_CD, C.JUGYO_CD, D.JUGYO_MEI, '0','0','0' FROM table1 As C INNER JOIN 授業マスタ AS D ON C.JUGYO_CD = D.JUGYO_CD WHERE C.JUGYO_CD NOT IN ( SELECT JUGYO_CD FROM table1_wk WHERE ID='aaa' )

  • saeyui
  • お礼率90% (255/281)

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

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

このまま末尾に Order by 2,3,4 ではダメでした? 2番目から4番目までの列でSORTする、と言うANSI共通の構文です。 ダメだったら、インラインビューで括ってしまう、というのは? select inview.* from ( ここに上記のSQLを書く ) inview order by 2,3,4

saeyui
質問者

お礼

出来ました! 数字でOrder By を指定することも出来るのですね。 知りませんでした。 大変助かりました。有り難うございました。

関連するQ&A

  • UNION / UNION ALL 時のORDER BY について

    初めて質問させていただきます。 表A(以下,TBL_A) と 表B(以下,TBL_B)があり,表名が 異なるだけでカラムの項目数,データ型は一致していてそれぞれ [TBL_A] SELECT * FROM TBL_A ORDER BY 1, 2 [TBL_B] SELECT * FROM TBL_B ORDER BY 2, 1 を UNION / UNION ALL したいのですが,上記のように ORDER BY が異なっている場合にはどのようにすれば いいのでしょうか? 苦戦中の成果物としてはそれぞれに固有の区分カラムを設け, その区分で判断し DECODE で ORDER BY しようとしたのですが 「"右カッコがありません"」と出て行き詰っています。 SELECT 区分, ○○, □□ FROM TBL_A WHERE ○○ = ??? UNION ALL (SELECT 区分, ○○, □□ FROM TBL_B) ORDER BY 区分, DECODE(区分,A,(1,2),B,(2,1)) 宜しくお願いします。

  • DB2で UNION ALL と GROUP BY の合わせ技のSQLの作り方

    DB2で下記SQLにグループ化して 合計やカウント数を出したいのですが、 うまくいきません --------------------------------------- SELECT A.NYU1 AS NYU ,0 AS SYU ,A.KEN1 AS KEN ,A.CODE1 AS CD From A ) UNION ALL ( SELECT 0 AS NYU ,B.SYU2 AS SYU ,B.KEN2 AS KEN ,B.CODE2 AS CD From B ) ORDER BY CD --------------------------------------- MS-ACCESSなら以下のような感じでうまくいくのですが。。。 SELECT SUM(NYU) AS A ,COUNT(SYU) AS B FROM ( SELECT F1 ,F2 FROM A UNION ALL SELECT G1,G2 FROM B ) GROUP BY NYU ご教授お願いします

  • group by句

    色々と試行錯誤してやっていますが、なかなか自分の 思うような結果が得られないためご質問させて下さい。 テーブルが全部で3つあります。 テーブルA id name 1 巨人 2   西武 テーブルB id name 1 小笠原 2 ラミレス 3 中島 4  片岡 テーブルC id テーブルAID テーブルBID 背番号 1 1 1 30 2 1 2 10 3 2 3 3 4 2 4 8 テーブルを結合し、テーブルCにある 背番号をテーブルAid,テーブルBidを元に sumしたいのですがうまくいきません。 以下がそのSQLになります。 (1)サブクエリーを使ったSQL この場合値が重複されて表示されてしまいます。 select a.name,b.name,c.name, (select sum(背番号) from tableC c where c.テーブルAId = a.id group by c.テーブルAid ), (select sum(背番号) from tableC c where c.テーブルBid = bid group by c.テーブルBid ) from tableC c inner join tableA a on a.id = c.テーブルAid inner join tableB b on b.id = c.テーブルBid (2) select a.name,b.name,c.name, (select sum(背番号) from tableC c where c.テーブルAId = a.id ), (select sum(背番号) from tableC c where c.テーブルBid = bid ) from tableC c inner join tableA a on a.id = c.テーブルAid inner join tableB b on b.id = c.テーブルBid group by c.テーブルAid 重複はされないのですが、group byが一つのみなので ちゃんとした出力がされません。    他にやり方があるのかもしれませんが、お分かりになる方が    いらっしゃいましたら、ご教授お願い致します。

  • 複数のテーブルから同じ条件で検索したい。

    例えば、テーブルがA,B,C,Dとあって、レイアウトはそれぞれ違います。 ですが、全てのテーブルに共通の項目もあります。 共通項目名:FLG このような前提で、 A,B,C,Dのデータを同じ検索条件で全ての内容を表示させたいのですができませんか? ベタに書くと select * from A where FLG='2'; select * from B where FLG='2'; select * from C where FLG='2'; select * from D where FLG='2'; と言う感じで結果を表示させたいのです。 実際にはテーブル名がものすごい数なので、ベタに書きたくないので、この部分をtab テーブルのtnameとかを使っていっぺんに検索結果が出せればありがたいのですけが・・・ こういうのはシェルとか使わないとだめですかね?(DBはオラクルです。)

  • 同じテーブルでのUNION

    テーブルtableである列aのデータが1,2,3,4,5,6,7,8,9と 入っていたとします。 このテーブルを1,2,5,3,4,6,7,8,9という順番で SELECTしたい場合はどのようにすればよろしいでしょうか? select a from table where a IN (1,2) union select a from table where a = 5 union select a from table where a NOT IN (1,2,5) としてみたのですが1,2,3,4,5,6,7,8,9と表示されてしまいます。 宜しくお願いいたします。

  • sqlについて

    下に書いたsqlのコードの内容(どういう処理でどういう結果になるのか)が知りたいです。 どなたかわかる方教えてください。 select b.ym, b.no,     isnull(e.sumcnt,0)as val, null as bunsi, null as bunbo from (select distinct ym,no from Table_A)b inner join (select ym from Table_B where cd=1)d on b.ym=d.ym left outer join (select b1.ym,b1.no,sum(c1.cnt)as sumcnt from Table_A b1 inner join (select ym from Table_B where cd=1)d1 on b1.ym=d1.ym inner join Table_C c1 on b1.ym=c1.ym group by b1.ym,b1no)e on b.ym=e.ym and b.no=e.no

  • OracleのUnion内でそれぞれのOrderBy結果を反映する方法

    OracleのUnion内でそれぞれのOrderBy結果を反映する方法について AテーブルからデータをBの昇順で一覧を取得する際、Bの特定のコードを先頭に持ってこようとしています。 例)金融機関テーブル(BANK)を金融機関コード(BANK_CK)の昇順で並び替えるが、全銀の'9999'を先頭に持って来たい。 (SELECT BANK_CD FROM BANK WHERE BANK_CD = '9999') UNION (SELECT BANK_CD FROM BANK WHERE BANK_CD <> '9999' ORDER BY BANK_CD); としてしまうと、「ORA-00907: 右カッコがありません。」のエラーとなります。 SELECT 0 "PRE_KEY", BANK_CD FROM BANK WHERE BANK_CD = '9999' UNION SELECT 1 "PRE_KEY", BANK_CD FROM BANK WHERE BANK_CD <> '9999' ORDER BY PRE_KEY, BANK_CD; としてやると、値は並び変わりますが、いらない"PRE_KEY"が取れてしまいます。 BANK_CDだけ取得する方法はありますでしょうか?oracle11gです。

  • oracleでwith句の結果を使ってupdate

    oracleでwith句の結果を使って外部結合?でupdateしたいのですが 上手くいきません。 oracleでは無理なのでしょうか。 よろしくお願いいたします、。 /*---------- with v1 as ( select row_number() over(PARTITION BY ・・・ ORDER BY ・・・) as rnum ,no ,col1 ,・・・ from ・・・ ) update ( select A.col1 A_COL, v1.col2 B_COL from table1 A inner join table2 B on A.cd1=B.cd1 inner join v1 on A.no=v1.no where v1.rnum=1 and ・・・ ) set A_COL=B_COL ; ----------*/ と書いたのですが、 実際に実行してみると、 カッコ「(」、「)」がないとか、 selectが必要とか, A_COLやB_COLが無効ですとか、 となります。 どこが悪いのでしょうか。 oracleではupdateでwithは使えないのでしょうか。 よろしくお願いします。

  • unionでマージした副問合せを結合

    2つの表をunionでマージした結果を副問合せで使用し、この副問合せを他の表とwhereで結合するとORA-00918: 列の定義が未確定です。がでます。こんな感じです。 副問合せそのものは単独で実行してもエラーにならないので結合に問題があるようです。 どなたか回答お願いします。行き詰っています。 select as.xx1,asxx2 from (select * from aa union select * from bb) as, af where as.xx1=af.xx1;

  • Oracle8での外部結合

    現在、oracle8.1.7で開発しています。 T1,T2,T3の3つのテーブルがあります。 T1のデータで、T3のテーブルにまだデータが存在しないものを検索しています。 それは既にできました。 次に、条件として、  (1)T1のA,B,Cと一致し、かつFLGが5または9  (2)T1のA,B,Cと一致するデータがない。 という2点を追加しました。 しかし、以下のようにFLGが1となっているものまで検索してしまいます。   <T1>        <T2>      <T3> A:あいうえお     A:あいうえお    データ無し B:bbb        B:bbb C:ccc        C:ccc             FLG:1   ===SQL文============================================================== SELECT A,DT1,DT2 FROM T1 WHERE A LIKE 'あ%' ---追加部分---- AND ( EXISTS (SELECT A FROM T2 WHERE A=T1.A AND B=T1.B AND C=T1.C AND FLG IN (5,9)) OR NOT EXISTS (SELECT A FROM T2 WHERE A=T1.A AND B=T1.B AND C=T1.C ) ) ----ここまで---- AND NOT EXISTS (SELECT * FROM T3 WHERE KATAMEI='あ' AND NO=1) どこがいけないのでしょうか? よろしくお願いしますm(_ _)m