SQL Group Order 連結

このQ&Aのポイント
  • SQLエラーの原因となっている要素を特定するため、商品マスターと料金マスターの結合を行い、最新の金額を取得するためのSQL文を作成したい。
  • 商品マスターと料金マスターのデータを連結し、各商品毎のコード、名称、料金マスターの最大開始日のレコードを取得するためのSQL文を作成したい。
  • SQLエラーが発生しているため、商品マスターと料金マスターの結合、GroupBy、日付の昇順ソート、最初の1件の条件を満たすSQL文を作成したい。
回答を見る
  • ベストアンサー

SQL Group Order 連結

はじめまして OracleSqlですが、商品マスター、料金マスターの2つがあります。 商品マスター  商品コード,名称  AAAA,AAAAA  BBBB,BBBBB 料金マスター  商品コード,開始日,金額  AAAA,2009/4/1,1000 AAAA,2009/7/1,2000  BBBB,2009/4/5,3000 BBBB,2009/7/5,4000 SQLで AAAA,AAAAA,2009/7/1,2000 BBBB,BBBBB,2009/7/5,4000 と求めたいのです。 各商品毎のコード+名称+料金マスターの最大開始日のレコード where2つの組あわせ+料金マスターの商品コードでのGroupBy+ 日付Order+最初の1件という条件になるのですが、どうもSQLエラーばかりで。 識者の方、宜しくお願いいたします。

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

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

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

下記のようなSQLで求められると思います。 select   SYO.商品コード   ,SYO.名称   ,RYO_1.開始日   ,RYO_1金額 from   商品マスター  SYO   ,料金マスター  RYO_1   ,(     select       商品コード       ,max(開始日)  as MAX_START_DATE     from       料金マスター     group by       商品コード   )        RYO_2 where   SYO.商品コード = RYO_1.料金コード   and RYO_1.商品コード = RYO_2.商品コード   and RYO_1.開始日 = RYO_2.MAX_START_DATE 商品コード、max(開始日)の組み合わせを表す表を内部的に作成して、 それと各テーブルを結びつけて求めます。 他の方法として、over()という分析関数を使う方法もあるのですが 大変失礼な言い方かもしれませんが、現状の理解では 手を出さないほうが無難かもしれません^^; 興味があれば『ORACLE 分析関数 OVER』などで 検索すると出てくると思います。

その他の回答 (1)

回答No.2

select s.コード as コード ,s.名称 as 名称 ,max(r.開始日) as 開始日 ,max(r.金額)keep(dense_rank Last order by r.開始日) as 金額 from 商品マスター s,料金マスター r where s.コード = r.コード group by s.コード,s.名称 ;

関連するQ&A

  • sqlの作り方

    テーブルAAがありまして、code,rereki,name.....というフィールドなのですが、 code , rereki , name 1 , 1 , aaaaa 1 , 2 , aaaaaa1 1 , 3 , aaaaaa2 2 , 1 , bbbbb 2 , 2 , bbbb-2 3 , 1 , ccccccc 上記の内容ですが同じそれぞれのコードでrerekiの最大値のnameを とるSQLがわからずに悩んでいます、どなたかご教授宜しく御願いします 欲しい結果です 1,3,aaaaaa2 2,2,bbbb-2 3,1,ccccccc

  • SQLでご質問があります

    SQL初心者です、、 SQLについてご教授ください。 ※ACCESSですが、他DB用でもこちらで変更します。 以下のデータがあるとして、同じ「コード」が2件以上あるもので 「カラム1」が複数(2種類以上)あるものを抽出したいと考えております。 ※同じ「コード」2件以上→コードが'0001','0003' ※「カラム1」が複数もの→コードが'0003'(bbbb,eeee,ffffの3種類ある) コード,カラム1 0001,aaaa 0001,aaaa 0002,aaaa 0003,bbbb 0003,eeee 0003,ffff の場合ですと結果として以下3レコードを出力したいです。 コード,カラム1 0003,bbbb 0003,eeee 0003,ffff 以上です。よろしくお願いします。

  • SQLが組めません…

    大変恥ずかしい話ですが恥をしのんでHelpさせていただきます。 例えばテーブルTESTに項目がCODE,NAMEとあったとして NAMEの内容がかぶっている項目が有ったら 大きいCODEの方を小さいCODEの内容に上書きするSQLを組みたいのです ex) CODE NAME --------- 0001 AAAA 0002 AAAA 0003 BBBB 0004 CCCC 0005 CCCC を以下のような実行結果にしたい ex) CODE NAME --------- 0002 AAAA 0002 AAAA 0003 BBBB 0005 CCCC 0005 CCCC どなたかお応えください お願いします。。。 使用しているのはORACLE9iです。

  • 条件に応じたSQL文について

    お世話になっております。 以下の場合どのようにSQLを書くかで困っています。 どうかお願いします。 DBはOracle10gです。 テーブルA 区分   integer コード   integer(上記区分が0の場合は得意先のコード、1の場合は商品のコードが登録されています。) 得意先マスタ コード integer 名称 varchar 商品マスタ コード integer 名称 varchar 上記のテーブルAを読んで、 区分が0の場合は得意先マスタの名称 区分が1の場合は商品マスタの名称 をもってきたいのですがやり方がわかりません。 どうかよろしくお願いします。

  • mysqlのsql文について質問です

    こんにちは。よろしくお願い致します。 sqlの書き方がわからず質問いたします。 コード10020のaaaaさんについて 年月(ym)別に点数(score)を集計した値と 点数の総合計を一度にまとめて取得したいです。 データの内容は下記のとおりです。 アドバイス頂けますととても助かります。 よろしくお願い致します。 code,name,score,group,ym --------------------------- 10020,aaaa,10,1,201305 10020,aaaa,15,2,201305 10020,aaaa,20,7,201305 10020,aaaa,12,9,201305 10020,aaaa,10,1,201306 10020,aaaa,15,2,201306 10020,aaaa,20,7,201310 10020,aaaa,12,9,201310 10020,aaaa,10,1,201310 10021,bbbb,10,1,201305 10022,cccc,10,1,201305

  • Oracle SQL 2つのテーブルを使用する書き方について

    OracleSQLどころかSQLが初めてなのですが、以下のような事がしたいんです。 金額テーブル       品名マスタ 品名コード 品名 金額  品名コード 品名コード名 1      ○○ \100   1      1の名前 1      ○× \250   2      2の名前 2      △△ \200   この2つを使用して 品名 品名コード1の金額 品名コード2の金額  というテーブルをSQL上で書きたいのですが、可能でしょうか? 可能であればどういう書き方にするといいのかご指導宜しくお願いします。

  • SQLについて教えてください

    SQL*plusで次のようなことをしたいのですがSQLでどのように書けばよいでしょうか? 教えてください。 以下の「マスターデータ」「県名マスター」「種別マスター」が存在しています。 1.県コード、種別コードでグルーピングします。 2.県名を県名マスターの県コードで一致させて取得します。 3.種別名称を種別マスターの種別コードで一致させて取得します。 4.年月日が最新のレコードを取得します。    ※ただしフラグ0、2が存在する場合はフラグ2の年月日が最新のものを取得します。 データレポートを使用しているためSQLでやるしかないのですが。。。 すみませんがよろしくお願いします。 【マスターデータ】 県コード 種別コード 年月日  金額 変更年月日 フラグ ------------------------------------------------------------------------- 11   02    20080101 100  20080201   0    (1) 11   02    20080102 200  20080202   2    (2) 11   03    20080103 300  20080203   0    (3)種別03のため対象外 12   03    20070101 400  20070201   2    (4) 12   03    20070102 500  20070202   0    (5) 12   02    20070103 600  20070203   1    (6)フラグ1のため対象外 13   03    20070102 700  20070202   0    (7) 【県名マスター】 県コード 県名 ------------------------------------------------------------------------- 11   埼玉県 12   東京都 13   千葉県 【種別マスター】 種別コード 種別名称 -------------------------------------------------------------------------- 02    1種 03    2種 【結果】 県名   種別名称 年月日  金額 変更年月日 フラグ -------------------------------------------------------------------------- 埼玉県  1種   20080102 200  20080202  2     (2)   東京都  2種   20070101 400  20070201  2     (4) 千葉県  2種   20070102 700  20070202  0     (7)

  • SQL文で質問

    SQL文で質問 いつもお世話になっております。 SQL文について質問です。 仮にですが、商品マスタというテーブルと、対応テーブルという二つのテーブルがあります。 対応テーブルには、商品コードが親コード、子コードといった形で構成されています。 対応テーブルのいくつかの親のコードを条件に、親コードと子コードを検索して、それぞれの商品名を検索したいと思っています。 現在、SQL文で、親コードに対応した商品名だけを取得しているのですが、子コードに対応する商品名も検索したいと思っています。 現在のSQL分としては、 SELECT 対応テーブル.親コード、商品マスタ.商品名、対応テーブル.子コード FROM 対応テーブル,商品マスタ WHERE 対応テーブル.親コード = 商品マスタ.商品コード AND 対応テーブル.親コード = 1000,1002,1004 このSQL文で検索した子コードで、商品マスタの商品名を検索したいのですが、どのようなSQLを書いたらよいのでしょうか。 ご教授願います。

  • SQLについて

    以下のSQLを実行すると。 SQL実行中に以下のエラーが発生しました。 エラーコード:907 [Oracle][ODBC][Ora]ORA-00907: 右カッコがありません。 というエラーが表示されます。 どこがおかしいでしょうか? SELECT Q1.Pコード, Q1.Qコード, T1.E名称 A名称, T2.E名称 B名称, T3.E名称 C名称, T4.E名称 D名称, FROM ( ( ( ( SELECT Pコード, Qコード, Aコード, Bコード, Cコード, Dコード, FROM 報告書 WHERE Pコード = '0001' AND Qコード = '0001' AND ) Q1 INNER JOIN Eマスタ T1 ON Q1.Aコード = T1.Eコード ) INNER JOIN Eマスタ T2 ON Q1.Bコード = T2.Eコード ) INNER JOIN Eマスタ T3 ON Q1.Cコード = T3.Eコード ) INNER JOIN Eマスタ T4 ON Q1.Dコード = T4.Eコード ORDER BY Pコード, Qコード;

  • 【SQL】登録されているかを比較したい

    SQL初心者で仕事でSQL文を考えています。 どのようにすればいいのかよくわからないので教えてください。 現在、商品マスタと価格テーブルがあります。 (商品マスタ) 商品コード 商品名  0001    商品A  0002    商品B  0003    商品C  0004    商品D (価格テーブル)  商品コード 価格  登録日   0001    100円  11/1   0001    110円  11/2 0002 200円 11/1 0002 190円 11/2 0001 105円 11/3 それぞれの商品(商品コード)には毎日価格を登録するようになっています。 今日が11/3である場合、商品コード=0001、商品Aは登録がされていますが その他の商品は登録されていない状況です。 碌このような状況で「今日の価格は全商品登録されているか」 ということをSQLでチェックすることはできるのでしょうか。 2回のSQLに分けて個数を比較するが普通ですか。 たとえば、 (1)select count from 商品マスタ (2)select count from 価格 where sysdate = 登録日 (1)-(2)が0でないのですべて登録できていないと判断する。 複雑すぎてよくわかりません。 よろしくおねがいします。