• ベストアンサー
  • 困ってます

SQL SEREVER で選択した固定値との結合について質問です。

SQL SEREVER で選択した固定値との結合について質問です。 日付と紐付けたデータを1ヶ月分出力するSQLを作成しています。 紐付け対象となるデータに、1ヶ月毎日のデータが存在するわけではありません。 そこで、固定値として2010年7月であれば、 2010-07-01~2010-07-31 までの日付を全て固定値として取得 (対象データは行で取得したいのでUnionで繋いでいく)して、 その日付と紐づく対象データを外部結合しようと考えました。 SqlServerの場合、固定値のみを取得した場合 ダミーテーブルを使用するということができないようなので、 取得した固定値との紐付け時に下記???のところの指定がわかりません。 Select '2010-07-01' 日付 Left Join 結合対象テーブル On 結合対象テーブル.日付 = ???.日付 他のやり方で実現可能なのかもしれませんが、調べてもわかりませんでした お解りになる方いらっしゃいましたら、教えていただければと思います。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数2792
  • ありがとう数8

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

  • ベストアンサー
  • 回答No.1

以下で参考になりますか? SELECT a.日付, b.* FROM ( SELECT '2010/07/01' 日付 UNION ALL SELECT '2010/07/02' UNION ALL SELECT '2010/07/03' UNION ALL SELECT '2010/07/04' UNION ALL ・・・ SELECT '2010/07/31') AS a LEFT OUTER JOIN 結合対象テーブル AS b ON b.日付=a.日付 ちなみにSQL Server 2008では以下の書き方も可能です。 SELECT a.日付, b.* FROM ( VALUES ('2010/07/01'),('2010/07/02'),('2010/07/03'), ('2010/07/04'),・・・,('2010/07/31')) AS a(日付) LEFT OUTER JOIN 結合対象テーブル AS b ON b.日付=a.日付

共感・感謝の気持ちを伝えよう!

質問者からのお礼

教えていただいた方法で実現できました。 ありがとうございます☆

関連するQ&A

  • 固定値を含む結合と複数テーブルの結合について

    「1.固定値を含む結合」と「2.複数テーブルの結合」について教えて下さい。 最近oracleを使い始めてSQLで表の結合を書く場面があるんですが LEFT(RIGHT) JOIN を使うのか、(+)を使って書くのかで迷っています。 LEFT(RIGHT) JOINだと固定値を含めて外部結合しようとするとエラーになってしまいます。 それが嫌で(+)を使っていたんですが 今度は複数のテーブルを(+)で結合しようとするとエラーになってしまいます。 (AテーブルとBテーブル、AテーブルとCテーブルなど?) こういう場合はどうすれば良いのでしょうか? とりあえず副参照をFROMに指定して対処してるんですが 何かきちんとした書き方があるのでしょうか?誰か教えて下さい。

  • テーブル結合について、下記SQLをANSI結合の書き方で表したい。

    テーブル結合について、下記SQLをANSI結合の書き方で表したい。 select * from (select key from A union select key from B union select key from C) X, A,B,C where X.key=A.key(+) and X.key=B.key(+) and X.key=C.key(+) このSQLをANSI結合の記述で書きたいのですが、 (+)での結合文になれておらず試行錯誤しております。 下記のようなのかなとは模索しておりますが、 手元に実行環境がなくわかりません。 また、要所気付く点などありましたら、ご指摘願います。 select A.*, B.*, C.* from (select key from A union select key from B union select key from C) X, LEFT JOIN A ON X.key=A.key LEFT JOIN B ON X.key=B.key LEFT JOIN C ON X.key=C.key

  • SQLの結合

    SQLの結合を行う際にwhereで結合する場合とfromないでleft joinなどで結合を行う場合ではどちらのほうが処理が早いのでしょうか?

その他の回答 (1)

  • 回答No.2

>ダミーテーブルを使用するということができないよう 何を言いたいのかよく分かりませんが、1ヶ月分の日付の集合を生成といったことなら、SQL Server 2005以降なら、WITH式で再起呼出する方法でも作れると思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 OracleではDualというテーブルを使用することができなので、同様のものがSqlServerにはないということでした

関連するQ&A

  • Accessの表結合SQL

    AccessのSQLで外部結合を複数使うと SQLがエラーになります。 クエリで確認してエラーにならない様につくってみましたが、意図する事をやろうとするとエラーになります。 どこが悪いか教えていただけませんか?おそらくSQLサーバーでは余裕で通るSQLだと思うのですが。。。 SQL = SELECT * FROM T1 LEFT JOIN T2 ON T1.A = T2.A LEFT JOIN T3 ON T1.B = T3.B LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' やりたいのはT1を基準にT2,T3,T4からデータを引っ張ってきたい。その条件としてT4から引っ張ってくるのは T4.DがiNumである事、基準となるT1のT1.EがiNumである事です。 Accessでは"AND T4.D = iNum"がだめで、 WHERE区に書くと外部結合にもかかわらずT4.D = iNumのデータしか抽出されなくなる。(T1.C = T4.CのデータがT4.D = iNumでなくてもT1のデータが抽出されなくてはならない。) さらに SQL = SELECT * FROM ((T1 LEFT JOIN T2 ON T1.A = T2.A) LEFT JOIN T3 ON T1.B = T3.B) LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' こんな括弧が必要になってくる。 これだとT1とT2を外部結合した結果をT3と外部結合して さらにその結果をT4と外部結合しているという意味あいになってしまって、意図が違うのですが。。 結果は同じなのでAccessに譲ってやってもいいのですが 前者はT1で抽出されなければならないデータが抽出されないので困ります。 よろしくお願いいたします。

  • SQL 外部結合

    Access2003でSQLをかいています。 以下のように書いているのですが、 「結合式がサポートされていません」というエラーが発生します。 対応策をご存知の方、お教えいただけますでしょうか。 使用するテーブルは以下の3つです。 ・社員テーブル ・所属テーブル ・判定テーブル それぞれのテーブルの項目は以下のとおりです。 ▼ 社員テーブル -------------------   個人No   入社年度 ▼ 所属テーブル -------------------   個人No   所属コード ▼ 判定テーブル -------------------   所属コード   入社年度   判定フラグ 下記のようなSQLを書いています。 --------------------------------------------------------------------- SELECT A.個人No, C.判定フラグ FROM (社員マスタ A  LEFT JOIN 所属テーブル B       ON (A.個人No = B.個人No))  LEFT JOIN 判定テーブル C       ON (B.所属コード = C.所属コード AND A.入社年度 = C.入社年度) --------------------------------------------------------------------- 最終行の「AND A.入社年度 = C.入社年度」がなければ、SQLは実行できますが 入社年度で条件を絞れないので正しい結果になりません。 LEFT JOIN 句は3テーブル目の条件式で1テーブル目を参照できないということでしょうか?

  • SQL 外部結合について

    EXCELでODBC接続で外部データを取り込み、クエリテーブルを作成するところまではできるのですが、MicrosoftQueryを使って外部結合をしようとすると、テーブルが3個以上ある場合は外部結合できませんとエラーが表示されます。 直接SQLをさわれば出来るのかと思い、 SELECT フィールド名1, フィールド名2, ... FROM (((TABLE1 LEFT JOIN TABLE2 ON TABLE1.NO = TABLE2.NO)LEFT JOIN TABLE3 ON TABLE1.NO = TABLE3.NO)LEFT JOIN TABLE4 ON TABLE1.NO = TABLE4.NO)LEFT JOIN TABLE5 ON TABLE1.NO = TABLE5.NO を入力したのですが、「ORA-00942: 表またはビューが存在しません」というエラーが発生しました。 いろいろ調べてみたのですが全くの初心者なもので本当に困っております。 どなたかアドバイス等よろしくお願いします。

  • SQL Server7.0での特殊な結合演算子について

    最近、SQLServer7.0をいれて勉強しています。 http://www.techscore.com/tech/sql/index.html を参考に勉強しています。 そこの特殊な結合演算子の自然結合,指定結合ができません。 受注表、顧客表は「テーブルの結合」のところのテーブルを作成しました. NATURAL JOINの結合やON句を使う指定結合をやると 「列のプレフィックス '受注表' は、テーブル名と一致しないか、クエリ内の別名と一致しません」 というエラーがでます。WHERE句を使った結合だとできます。 何が問題なのでしょうか。 参考HPには「SQL92はある種の共通する結合操作を簡単に実行できるように、特別な構文を用意している」 とかいてあるですが、 SQLServer7.0にはバージョンが古すぎてSQL92がないってことなんでしょうか。 SQLServerをはじめたばかりなので、あまりくわしくないのですが、是非ともご教授よろしくおねがいします。

  • SQLで、Join句で結合したテーブルにデータが無い場合について

    SQLについての質問です。 Join句を使ってテーブルを結合しています。 Aテーブル(社員データ)に存在する勤務区分フィールドの値に対応して、 Bテーブル(勤務データ)から勤務区分(一意)に対応したデータを持って来るSQLを作成したところ、 Bテーブルに存在しない勤務区分を持つAテーブルのデータは結果に出ませんでした。 このように、結合したBテーブルに対応するデータが無い場合でも、Aテーブルに存在するデータを全て出したい場合、 何か方法はあるのでしょうか? 現在は一度Aテーブルから全てのデータをセレクトした後に、1件1件ループしてBテーブルからセレクトする方法をしていますがもっと簡潔にできるなら簡潔にしたいと思っています。 どなたかお答え頂けると幸いです。よろしくお願いします。

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

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

  • テーブル結合について

    テーブルの結合についてお聞きしたいことがあります。 カラム「KEY」を結合条件に テーブルA、B、Cを結合して【取りたい結果】のようなデータを取りたいと思っています。 しかし、テーブルAにBとCをLEFT JOINを結合した所、 【取得された結果】のデータが取得されました。 どのような結合をしたら期待通りの結果が得られるのでしょうか? 回答宜しくお願いします。 【取得された結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 B-1 C-2 A-1 B-1 C-3 2 A-2 3 A-3 【取りたい結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 C-2 A-1 C-3 2 A-2 3 A-3 【テーブルA】 key dataA --------------------- 1 A-1 2 A-2 3 A-3 【テーブルB】 key dataB --------------------- 1 B-1 【テーブルC】 key dataC --------------------- 1 C-1 1 C-2 1 C-3

  • 結合について質問です。

    結合について質問です。 ■テーブル TOIAWASE A KOKYAKU B TOIAWASE_TAISHOU C MOUSIKOMI_INFOMATION D MOUSIKOMI_INFOMATION E KINMU_MASTER F ■結合 A.KOKYAKU_NO = B.KOKYAKU_NO AND ※1:1 A.TOIAWASE_NO = C.TOIAWASE_NO(+) ※1:1 C.MOUSIKOMI_TYPE = D.MOUSIKOMI_TYPE(+) ※1:1 D.OLD_MOUSIKOMI_TYPE = E.MOUSIKOMI_TYPE(+) ※1:1 A.KINMU_CD = F.KINMU_CD(+) ※1:1 ■データ整合性について Aがある場合、Bは必ずあります。 Aがある場合、Cはあるとは限りません。 Cがある場合、Dは必ずあります。 Dがある場合、Eがあるとは限りません。 Aがある場合、Fがあるとは限りません。 Aをもとに問い合わせ一覧を取得したいです。 Aがある場合、Cがあるとは限らないため、それに紐づくテーブルは全て外部結合をするしかありません。 一応、上記SQLでも取得はできるのですが、他に良い(効率の良い)SQLはないのでしょうか? 宜しくお願いします。

  • 結合SQLに関して

    結合SQLに関して ある3つのテーブルが存在し、TABLE1の情報を核として、TABLE2,TABLE3と 結合させて情報を取得しようと考えています。 TABLE1とTABLE2だけであれば LEFT OUTER JOIN等を駆使すれば、TABLE1を核として 全件表示可能かと思いますが、TABLE3も含めて結果のような形にしたい場合は、 どのようにSQLを記述すれば良いでしょうか。。。。 初歩的な質問で申し訳ありませんが、教えて下さい。 TABLE1 NO 1 2 3 TABLE2 NO,BUSYO_CODE 1,123 2,123 3,456 TABLE3 BUSYO_CODE,BUSYO_NAME 123,総務 456,経理 結果 NO,BUSYO_CODE,BUSYO_NAME 1,123,総務 2,123,総務 3,456,経理 よろしくお願いします。

  • SQLの書き方がわかりません

    下記テーブルが access上にあります。 t1 ID 日付 01 2011/8/1 01 2011/9/1 02 2011/3/1 03 2011/5/30 t2 ID 日付 01 2011/7/1 01 2011/7/30 01 2011/8/1 01 2011/8/2 01 2011/9/2 02 2011/2/11 02 2011/3/1 02 2011/8/1 03 2011/4/30 03 2011/5/29 03 2011/6/30 このデータからt1を元に ID 日付1 日付2 01 2011/8/1 2011/8/1 01 2011/9/1 2011/8/2 02 2011/3/1 2011/3/1 03 2011/5/30 2011/5/29 というデータを取得するにはどのようなSQLを書けばよいでしょうか。 具体的にはt1とt2のIDが同じで、 t2の日付がt1の日付以下で最大のレコードと紐付けたいのです。