- ベストアンサー
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 このようにしたいと思っています。 よろしくお願いします。
- Oracle
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
素直に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.コード;
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
処理のスピード云々は、索引の有無など知らないと 何とも判りません。 まず、実行計画を見てください。(理想的な検索がされているか確認) 対処がから無ければ、再度質問されれば良いと思いますが、 その際は、実行計画の内容と索引の種類、各テーブルのデータ量等の 情報を付記してください。
お礼
回答ありがとうございます。 満足な結果が得られたので良いです。 スピード等は見直しが必要かと思いますので、自分なりにやってみます。 ありがとうございました。
- ossan_hiro
- ベストアンサー率66% (88/132)
KdataのKkubunが1のselect文とKkubunが5のselect文をunionで結合するのはどうでしょう?
補足
早速回答ありがとうございます。 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です。 よろしくお願い致します。
- ベストアンサー
- Oracle
- 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の記述で計算までして取得する事はできないでしょうか??? 教えて頂ければ幸いです。 よろしくお願いします。
- ベストアンサー
- Oracle
- テーブル間のデータ計算
データベースの初心者です(初心者以下かも) 当方クエリーで置き換えや抽出くらいしか使用したことがありません 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(最新データ) という結果を取得したいのです。 どなたか詳しい方のご教授をよろしくお願い致します。
- ベストアンサー
- SQL Server
- 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つづつの表示にしたいです。 大変申し訳ございませんが 宜しくお願いします。
- ベストアンサー
- Oracle
- 2つのテーブルのデータまとめて取得したい
SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。
- ベストアンサー
- SQL Server
- 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)・・ のように交互にデータを取得する方法ってありますか? うまく表現できなくてすみませんが、 よろしくお願いします。
- 締切済み
- SQL Server
- 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
- ベストアンサー
- SQL Server
- 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.店コード わかりずらい質問ですがよろしくお願いします。
- ベストアンサー
- SQL Server
補足
回答ありがとうございます。 実行した結果うまくいきました。 実際は、もう一つWHERE条件を追加して、GRIDに表示すると言う作業をしましたが、表示されるまで、時間がかかりすぎるので何か方法は無いでしょうか? M_Fuku、M_Shokuhin共に約40000件くらいのデータです。