• ベストアンサー

SELECT文で条件にあったテーブルからデータを取得するには?

WinServer2003,WinXP,ORACLR10g使用しています。 SQL文の問合せ(SELECT)で、条件にあったテーブルを読みデータを取得するにはどのようなSQLの記述方法が良いでしょうか、お願いします。 3つのテーブルがあります。 Kdata,M_Fuku,M_Shokuhin KdataのデータのフィールドKkubunが 1の時はM_Fukuから,5の時はM_Shokuhinから品名のデータを取得したいです。 Kdata 1 コード 2 日付 3 区分 4 数量 5 単価 M_Fuku 1 コード 2 品名 M_Shokuhin 1 コード 2 品名 日付  区分 品名    数量 単価 金額 060710  1  ジャケット 1  5000  5000 060711  5  玉子    2   100   200 このようにしたいと思っています。 よろしくお願いします。

noname#69946
noname#69946
  • Oracle
  • 回答数3
  • ありがとう数1

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

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

素直に2つのテーブルを結合し、結果として欲しいフィールドを条件により選択すれば 良いかと思います。 select decode(Kdata.コード,1,M_Fuku.品名,5,M_Shokuhin.品名) as 品名 from Kdata,M_Fuku,M_Shokuhin where Kdata.区分=1 and Kdata.コード=M_Fuku.コード or Kdata.区分=5 and Kdata.コード=M_Shokuhin.コード;

noname#69946
質問者

補足

回答ありがとうございます。 実行した結果うまくいきました。 実際は、もう一つWHERE条件を追加して、GRIDに表示すると言う作業をしましたが、表示されるまで、時間がかかりすぎるので何か方法は無いでしょうか? M_Fuku、M_Shokuhin共に約40000件くらいのデータです。

その他の回答 (2)

回答No.3

処理のスピード云々は、索引の有無など知らないと 何とも判りません。 まず、実行計画を見てください。(理想的な検索がされているか確認) 対処がから無ければ、再度質問されれば良いと思いますが、 その際は、実行計画の内容と索引の種類、各テーブルのデータ量等の 情報を付記してください。

noname#69946
質問者

お礼

回答ありがとうございます。 満足な結果が得られたので良いです。 スピード等は見直しが必要かと思いますので、自分なりにやってみます。 ありがとうございました。

回答No.1

KdataのKkubunが1のselect文とKkubunが5のselect文をunionで結合するのはどうでしょう?

noname#69946
質問者

補足

早速回答ありがとうございます。 unionで結合ですか、ちょっとやった事が無いので、調べて実行してみます。

関連するQ&A

  • ある条件のSELECT文の作成について

    以下のSQLの作成で悩んでいます。 【内容】 抽出元テーブルの中で、あるコードが同じデータは、 ある項目を全て同じ値にして取得したい。 (例) ■抽出元テーブル コード SEQ FLG  1    1   1  1    2    1    3    2    1   0  2    2  2    3  3    1   1 コードは同じ物が1つ又は複数あります。 コードが同じ物にはSEQで番号が連番されます。 FLGの項目がありますが、SEQ=1のデータしか設定されていません。 ■求めたい結果 コード SEQ FLG  1    1   1  1    2   1    1    3   1  2    1   0  2    2   0  2    3   0  3    1   1 全てのデータでFLGを求めて取得します。 取得の仕方はコードが同じでSEQ=1の値を取ります。 抽出元テーブルと結果のデータ件数は同じになります。 抽出元テーブルと結果の違いは、FLGに値が埋まっているかどうかの違いのみです。 このテーブルのFLGはUPDATEする事は出来ません。 別表なども利用しないで、 selectのSQL文だけで対応したいです。 どのような方法で対応できるでしょうか? オラクルのバージョンは10gです。 よろしくお願い致します。

  • ACCESSで複数の条件で集約したい

    ACCESS2002使用、winXPです。 ACCESSで複数の条件で集約したいのですが方法がわかりません。 例をあげますと、青果の取引を集計しているとして、「青果物コード」テーブル(コード、品名)があり、「取引履歴」(コード、数量、単価)テーブルがあるとします。 クエリで「コード、品名、単価、金額」を求めたいのですが、この際に、コード別でさらに単価別に集約したいのです。 コード 品名 単価 数量 100 かぼちゃ 80  2 100 かぼちゃ 85  1 100 かぼちゃ 80  2 100 かぼちゃ 82  1 110 きゅうり 15  1 110 きゅうり 15  3 このようなデータなら 100 かぼちゃ 80  4 100 かぼちゃ 85  1 100 かぼちゃ 82  1 110 きゅうり 15  4 となるようにしたいのです。 どのようなクエリにすればよいかご教授ください。 よろしくお願いします。

  • 2つのテーブルの合算値に関して

    教えて下さい。 SQLに関してです。 ある2つのテーブルの集計(数量の合算)をSQLで行いたいと考えています。 そこで、UNION ALL を使い集計させる事ができましたが、その中で、1つのテーブルに 条件を加えたいと考えています。 つまり、副問い合わせのような形にできないかと考えています。 《テーブル》  T_在庫日次      品目番号   場所コード   数量   処理区分  T_在庫月次      品目番号   場所コード   数量 《現状のSQL》 Select 場所コード,品目番号, SUM(数量) AS 数量 From ( Select 場所コード,品目番号, 数量 From T_在庫日次 UNION ALL Select 場所コード,品目番号, 数量 From T_在庫月次 ) Group By 場所コード,品目番号 上記のSQLに対し、T_在庫日次 の処理区分が ‘10’ のデータに対するT_在庫日次とT_在庫月次の数量の 合計を求めたいと考えています。 SQLの記述で計算までして取得する事はできないでしょうか??? 教えて頂ければ幸いです。 よろしくお願いします。

  • テーブル間のデータ計算

    データベースの初心者です(初心者以下かも) 当方クエリーで置き換えや抽出くらいしか使用したことがありません Acces2000かSQL2000でのテーブル間の計算について質問があります 商品テーブル コード,商品名,定価 001, ジュース,126 002, お菓子 ,105 003, みかん ,84 004, りんご ,73 売価テーブル コード,区分,売価 001, 1, 70 001, 2, 0 002, 1, 60 002, 2, 0 003, 1, 50 003, 2, 0 004, 1, 40 004, 2, 0 上記のような2つのテーブルのデータで 商品テーブルの定価から0.85を掛けて小数点以下を切り上げた結果を 売価テーブルの同じコードの区分1の売価フィールドに上書きする場合どのような 方法になるのでしょうか? ■希望結果 売価テーブル コード,区分,売価 001, 1, 108 001, 2, 0 002, 1, 90 002, 2, 0 003, 1, 72 003, 2, 0 004, 1, 37 004, 2, 0 Acces2000のクエリーでどうやってやるのでしょうか? よろしくお願いします

  • 特殊な?日付データ条件のSELECT文で困っています。回答御願いします。

    すいません。初心者のSQL構文の質問です。 データベースはSQLServer2005です。 ID | 履歴 | 有効日付 100 | 1 | 2009/5/15 100 | 2 | 2009/7/15 100 | 3 | NULL(最新データ) 200 | 1 | NULL(最新データ) のようなテーブルがあります。 データ履歴を作成するたびに有効日付には指定した日付が入ります。 作成した最新のデータには有効日付にはNULLが入るようになってます。 有効日付はdate型です。 このテーブルでのSELECTで 例えば、 2009/6/15と入力された時(条件)には 結果: 2 |2009/7/15 2009/7/15と入力された時(条件)には 結果: 2 |2009/7/15 2009/7/16と入力された時(条件)には 結果: 3 |NULL(最新データ) という結果を取得したいのです。 どなたか詳しい方のご教授をよろしくお願い致します。

  • 3つ以上のテーブルの結合に関して

    いろいろな書籍を見ながら試してみましたが どうも求めている結果が得られませんでした… ヒントでも構いませんのでアドバイスお願いします。 テーブルの仕様 ■テーブル1■ 店舗コード 日付 フィールド1n フィールド2n フィールド3n フィールド4n ■テーブル2■ 店舗コード 日付 フィールド5 ■テーブル3■ 店舗コード 日付 フィールド6 2つのテーブルの内部結合や外部結合のSQL文は確認できましたが 3つ以上の記述がテキストにありませんでした。 ※もしかしたら2つのテーブルを結合してからかと思いましたが 具体的な方法が思い浮かびませんでした。 オラクルは9g SQL*PLUS ■その他の条件■ すべてのフィールドが例えNULLでも店舗コードと日付 は表示されるようにする。 INを使用して抽出したい店舗コードのみを表示させたい。 (その場合並び替え順を指定したい場合はINのあとで順番を指定すれば よろしいでしょうか?) フィールド1~4までの「n」は同じ種類のフィールドですが区分が10ずつ あり算術演算子で合計を求めた値のみを表示させます。 そのためASを使用してフィールド名を短くしたいと考えています。 店舗コードと日付は3つのテーブルに共通してありますが 結合した場合は1つづつの表示にしたいです。 大変申し訳ございませんが 宜しくお願いします。

  • 2つのテーブルのデータまとめて取得したい

    SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。

  • SQL文の書き方。初歩的ですみません。

    SQL文苦手で困っています。教えてください。 MSSQLserver8.0使用です。 以下のテーブル。 コードA 区分 コードB 数量 101     A    301    1 101     A    302    2 101     A    303    1 101     B    901    2 101     B    902    1 102     A    301    1 102     B    901    2 を、コードB単位に数量を集計し、区分別に左右に分け 以下のように帳票出力したいのですが。  301 A 2 |(区切り)| 901 B 4  302 A 2 |(区切り)| 902 B 1  303 A 1 group by 区分, コードBといきたいところなんですが。 使用している帳票出力ソフトの関係上、1ページ毎に出力しなければならず、 通常、A区分データが多いため、改ページのタイミングがずれます。 A区分のデータとB区分のデータをそれぞれ別に取得し(2つのSQL)、 2つの結果を交互に1行ずつよむ・・・という方法以外に、 1つのSQL文で、 1行目がA区分(301)、2行目がB区分(901)、3行目がA区分(302)・・ のように交互にデータを取得する方法ってありますか? うまく表現できなくてすみませんが、 よろしくお願いします。 

  • 1回のSELECT文でデータを取得したい

    1テーブル(V_TEST)より日付(CTR_M)を抽出条件(単年月、複数年月)で、 金額(COSTM_GR)をそれぞれ合算した結果を表示したい 以下のSELECT文に合算処理を入れて完成するのですが、わかりません。 具体的な方法をご教授ください。 ※1回のSELECT文でデータを取得したい (以下にSQL文、テーブル内容、処理結果を明記します) 使用ソフト:SQL Server2000 ・SQL文 SELECT SECTN_C, TK = CASE WHEN CTR_M = '2005/06/01' THEN COSTM_GR ELSE 0 END, COSTM_GR AS TR FROM V_TEST WHERE CTR_M = '2005/06/01' OR CTR_M = '2005/04/01' ・V_TEST テーブル CTR_M SECTN_C COSTM_GR 2005/03/01 1 10000 2005/04/01 1 1 2005/04/01 1 2 2005/04/01 1 3 2005/04/01 1 4 2005/04/01 1 105 2005/04/01 1 12345678901 2005/06/01 2 100000 2005/06/01 1 1005 ・処理結果 SECTN_C TK TR 1 0 1 1 0 2 1 0 3 1 0 4 1 0 105 1 0 12345678901 2 100000 100000 1 1005 1005

  • 2つのテーブルから条件に一致しないデータ抽出

    2つのテーブルから条件に一致しない行のみ抜き出しCSV か他のテーブルに抜き出す処理を作ろうと思っています。 そこで質問なのですが、以下の2つのテーブルから 条件に一致しないコードのみ抜き出すSQL文などありますか? ----------------------------------------- マスターテーブル コード、ネーム1、ネーム2、店コード 1、あ、い、6 2、う、え、8 3、お、か、4 4、き、く、2 店コードテーブル 店コード、店区分 1、スーパー 2、コンビニ 3、デパート 4、ホームセンター ------------------------------------------ 条件は、マスターテーブルの店コードが店コードテーブルに存在 しないデータのみ抽出です。 抽出結果は、以下の様にしたいです。 1、あ、い、6 2、う、え、8 このような考え大丈夫でしょうか? SELECT * FROM マスターテーブル AS M INNER JOIN 店コードテーブル AS S ON M.店コード = S.店コード わかりずらい質問ですがよろしくお願いします。