年月が連続したテーブルとそうでないテーブルの連結

このQ&Aのポイント
  • ORACLE & SQL初心者のため、年月が連続したテーブルと特定の年月のみを含むテーブルの結合方法を教えてください。
  • テーブルAとテーブルBの結合によって、年月が連続したデータと特定の年月のみを含むデータを統合することができます。
  • SQLを使用して、年月が連続したテーブルとそうでないテーブルを結合する方法について教えてください。
回答を見る
  • ベストアンサー

年月が連続したテーブルとそうでないテーブルの連結

ORACLE & SQL初心者です。 うまい日本語がみつからないのですが、 テーブルAは年月が月ごとに入っていて、 テーブルBには特定の年月しか入っていない状態だとします。 以下のような状況のときに、SQLではどのような表現を 用いるのが正しいのでしょうか?それとも条件?がたりないのでしょうか? 【テーブルA】 +----------+------------+ |  年月 | 店名   | +----------+------------+ | 200901 | 八百八  | +----------+------------+ | 200902 | 八百八  | +----------+------------+ | 200903 | 八百八  | +----------+------------+ | 200904 | 八百八本店| +----------+------------+ | 200905 | 八百八本店| +----------+------------+ | 200906 | 八百八本店| +----------+------------+ | 200907 | 八百八本店| +----------+------------+ 【テーブルB】 +----------+----------+--------+ | 年月  | 品名  | 個数 | +----------+----------+--------+ | 200901 | みかん | 6  | +----------+----------+--------+ | 200905 | みかん | 3  | +----------+----------+--------+ 【結合後】 +----------+------------+----------+--------+ |  年月 | 店名   | 品名  | 個数 | +----------+------------+----------+--------+ | 200901 | 八百八  | みかん | 6  | +----------+------------+----------+--------+ | 200902 | 八百八  | みかん | 6  | +----------+------------+----------+--------+ | 200903 | 八百八  | みかん | 6  | +----------+------------+----------+--------+ | 200904 | 八百八本店| みかん | 6  | +----------+------------+----------+--------+ | 200905 | 八百八本店| みかん | 3  | +----------+------------+----------+--------+ | 200906 | 八百八本店| みかん | 3  | +----------+------------+----------+--------+ | 200907 | 八百八本店| みかん | 3  | +----------+------------+----------+--------+ ・・よろしくお願いいたします。

  • Oracle
  • 回答数1
  • ありがとう数1

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

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

分析関数は使えるなら、こんな感じで。 select 年月,店名,品名,個数 from TBLA a, (select 年月 開始年月,lead(年月,1,999999) over(order by 年月) 改定年月,品名,個数 from TBLB) b where a.年月>=b.開始年月(+) and a.年月<b.改定年月(+);

kerosin454
質問者

お礼

k_o_r_o_c_h_a_n様 ありがとうございます!! ご指摘の方法でどうやらイメージ通りに なりそうな感じです。 分析関数についても確認させていただきます。 ありがとうございました!!

関連するQ&A

  • access テーブル結合の逆?

    Access2003 お世話になります。SQLで以下のようなデータを取得する場合、上手い方法はあるのでしょうか。なんだかとても簡単な事のような気がするのですが…… テーブルA: ---品名--- りんご みかん もも いちご テーブルB: ---品名--- りんご もも このテーブルBに入力されているレコードをテーブルAから"除外"して、結果として「みかん」と「いちご」だけが欲しいのです。 テーブルBのレコードが少なければ、直接 品名<>"りんご" とか書いてもいいのかもしれませんが、結合のようなSQLで一発でできてしまったりしないでしょうか。 access上で可能なスマートな方法があれば教えていただきたいです。 よろしくお願いいたします。

  • レコードを指定項目の数値分取得する

    OracleのSQL文について質問させて頂きます。 以下のようなテーブルが存在するとします。 ID  品名  個数 001 みかん 1 002 りんご 2 003 ぶどう 2 このテーブルから、以下のような結果を取得したいのです。 ID  品名  個数 001 みかん 1 002 りんご 2 002 りんご 2 003 ぶどう 2 003 ぶどう 2 個数の数だけレコードを返す形です。 どういうSQLを組めばよいのか、わかりません。 お手数ですが、どなたかわかる方いらっしゃいましたら ご回答頂けますと幸いです。よろしくお願い致します。

  • ピボットテーブル 0個の行を非表示にしたい

    こんばんは。エクセル2003のピボットテーブルについてお伺いします。 A1=品名    B1=個数 A2=みかん  B2=2 A3=みかん  B3=1 A4=りんご  B4=1 A5=バナナ  B5=0 上記のデータをソースとして 行のフィールドに品名を、 「データのアイテムをドラッグします」に個数をドラッグして ピボットテーブルを作成した時に 個数が0の品名は表示させたくないのですが どうすればいいのでしょうか? 0のセルにカーソルを当て右クリックで「表示しない」を選択lしても 「現在選択されている範囲を隠す事はできません」とメッセージが出てしまいますし これはサンプルであり、実際のデータは数百個の0の行を非表示にしたいので 関数などを使って一気にできる方法を知りたいです。 アドバイスよろしくお願いします。

  • 2つのテーブルの項目の和が求まりません。

    以下のA、Bを結合して期待する結果を得たいのですが、 4時間、試行錯誤してもできませんでした(><) 制約条件:サブクエリーの有無は問いません。 ■テーブルA a b ---- 1 2 2 1 ■テーブルB a b ---- 1 1 3 7 ■期待する結果 a cnt ---- 1 3 2 1 3 7 aはキーですがAのみ、Bのみ、両方に存在することがあるので、 簡単そうでかなり難しいようです。。 うぅ。。オラクルのSQL入門をなくしてしまったのが痛いです。 難しいSQLがさっと書けるようになるお勧めなSQL本ありましたら 教えてほしいです。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • エクセルでデータ並び替え→別シートへ

      品名  蜜柑 林檎 林檎    サイズ  大   小    中  店名 計 A店  4   2       2 B店  6       3   3 というテキストがSeet1にあったとしてSeet2へ 店名 品名 サイズ 個数 A店 蜜柑  大   2 A店 林檎  中    2 B店 林檎  小    3 B店 林檎  中    3 と並び替えるにはどうしたら良いのでしょうか?

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

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

  • Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパ

    Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパフォーマンス向上 Oracleで1つのSQL内で同じテーブルを2回以上結合すると結果出力にかかる時間が非常に遅くなります。 例: SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id (テーブルBを2回結合している) こういう場合にパフォーマンスを落とさない方法はありますか?テンポラリテーブルでテーブルBのレプリカを作成して使用するというのはなしです。あくまで1つのSQLで結果出力できることを前提にパフォーマンスを向上する方法を教えてください。

  • 複数テーブルを結合するには?

    OS:WINDOWSXP SP2 ORACLE:Oracle9i Enterprise Edition Release 9.2.0.1.0 A, B, Cというテーブルがあるとします。 それぞれのテーブルには XXカラムと YYカラムがあるとします。 2つのテーブルを結合させるには、以下のSQL文を記述すれば良いと考えています。 SELECT A.*,B.* FROM A JOIN B ON A.XX = B.XX 3つのテーブルを結合するには、以下のSQL文を記述しています。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX JOIN C ON A.XX = C.XX 但し、この記述方法でいきますと、Cテーブルを右側外部結合に指定した場合のみ、 ORA-00904 "C" 無効な識別子です。 というエラーメッセージが表示されます。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX RIGHT OUTER JOIN C (←LEFT OUTER、FULL OUTER)なら通ります) ON A.XX = C.XX 何故、右側外部結合のみ不正となるのか不明であり、解決策が見つかりません。 複数のテーブルを結合する為のSQL文の記述方法を教えて頂けますでしょうか?

  • テーブルを結合して新規にテーブルに・・・

    アクセス2003でSQLを組んでデータベースを作っています。 まず、ユニオンクエリを使ってAクエリとBクエリを結合しました。 この結合したものを新規にテーブルを作成したいのですが、どうすれば良いでしょうか? 手順を教えて頂ければ幸いです。 よろしくお願いします。

  • 他のDBのテーブルと内部結合が可能でしょうか

    他のDBのテーブルと内部結合が可能でしょうか sql sever 2005 を使用します。このたび、データベースAのテーブルaを定期的に検索するsqlを作成することになりました。このsql文は、ストアードプロシージャとして登録予定です。 その際、テーブルbを内部結合で参照します。例として、テーブルaは社員番号があり、テーブルbは社員番号、社員名があります。(テーブルbは社員マスター) テーブルaを参照し、その社員名を内部結合(INNER JOIN)で取り出します。 ここで、テーブルa,bが共に、同じデータベース内にある場合は、問題ないのですが、 テーブルbは、別のマシンのsql sever 上にあります。(したがって、データベース名も異なります) このような状態で、内部結合による参照は可能でしょうか? また、内部結合ができないまでも、ストアードプロシージャで、データベースAのテーブルaを参照しながら、別のマシンのデータベースBのテーブルbを参照することは、原理的に可能でしょうか。 なお、データベースは共にsql server 2005を使用します。