UPDATE文で売上高のデータを更新したい

このQ&Aのポイント
  • VB6.0とOracle9iを使用し、変換マスタと売上高のデータを更新したい。変換マスタの変換コードと売上高の変換売上コードが一致する場合、変換マスタの得意先コードと得意先名で売上高の変換売上コードと売上名を更新する。更新後の売上高データを表示する。
  • VB6.0とOracle9iの環境で、変換マスタと売上高のデータを更新する方法について教えてください。変換マスタの変換コードと売上高の変換売上コードが一致する場合、変換マスタの得意先コードと得意先名を売上高の変換売上コードと売上名に更新します。更新後の売上高のデータを確認するためのソースコードも教えてください。
  • VB6.0とOracle9iを使用し、変換マスタと売上高のデータを更新したい場合、どのような手順を踏めばよいでしょうか?変換マスタの変換コードと売上高の変換売上コードが一致する場合、変換マスタの得意先コードと得意先名を売上高の変換売上コードと売上名に更新します。最終的に更新後の売上高のデータを確認するためのソースコードもお教えください。
回答を見る
  • ベストアンサー

UPDATE文

また、投稿させていただきます。 言語 VB6.0 DB ORACLE9i 接続 oo4o 売上高のデータを更新したいんです。 DBは2つあります。変換マスタ、売上高 ○変換マスタのデータ 変換コード 得意先コード   得意先名  1      100      あああ  2      200      いいい  3      300      ううう っいう風にデータがあります。 ○売上高のデータ 変換売上コード 売上名  1       NULL  2       NULL  3       NULL  4       NULL ていう風にデータがあります。 ●更新後の売上高のデータ 変換売上コード 売上名 100      あああ 200      いいい 300      ううう  4       NULL 変換マスタの変換コードと売上高の変換売上コードが一緒なら変換マスタの得意先コードのデータを 売上高の変換売上コードを更新し、変換マスタの得意先名を売上高の売上名に更新したいんですが自分で書いたソースでは更新後の変換売上コードの「4」→「NULL」になって帰ってくるんです。変換マスタになかったらそのままのデータにしたいのですが、どうかお願いします。ソース乗せます。 W_SQL = "UPDATE " W_SQL = W_SQL & "売上高 " W_SQL = W_SQL & "SET ( " W_SQL = W_SQL & "売上高.変換売上コード,売上高.売上名) = " W_SQL = W_SQL & "( SELECT 得意先コード,得意先名" W_SQL = W_SQL & " FROM 変換マスタ WHERE 売上高.変換売上コード = 変換マスタ.変換コード)"

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

  • ベストアンサー
  • 2ch
  • ベストアンサー率51% (64/125)
回答No.6

条件付加の対象が間違った こっちならいけると思う。 未検証 UPDATE 売上高 SET (変換売上コード,売上名) = ( SELECT 得意先コード,得意先名 FROM 変換マスタ WHERE 売上高.変換売上コード = 変換マスタ.変換コード ) WHERE 変換売上コード IN (SELECT 変換コード from 変換マスタ)

GERRARD
質問者

お礼

ありがとうございました。 2chさんのおかげで、無事できました。 本当にありがとうございました

その他の回答 (5)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.5

もういっちょ 既存を流用したパターン さらに未検証 UPDATE 売上高 SET (変換売上コード,売上名) = ( SELECT 得意先コード,得意先名 FROM 変換マスタ WHERE 売上高.変換売上コード = 変換マスタ.変換コード AND 変換マスタ.変換コード in (SELECT 変換売上コード from 売上高) )

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.4

UPDATE 売上高 SET 売上高.変換売上コード = HOGE.得意先コード ,売上高.売上名 = HOGE.得意先名 from ← 抜けてた ( SELECT 得意先コード,得意先名 FROM 変換マスタ WHERE 売上高.変換売上コード = 変換マスタ.変換コード ) HOGE where HOGE.得意先コード is not null ごめ、今SQL鯖しか環境がないので、未実証

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.3

このテーブル構造ではムリです。更新対象レコードが4レコードで、更新可能なレコード3件ですから、どうしても4件目は’Null'になってしまいます。 検索対象のフィールドを更新しているからそうなります。お望みの処理を行うなら、売上高データのテーブルと変換マスタと同じようにしてください。 変換コード 変換売上コード 売上名 1     100      あああ 2    200    いいい 3     300   ううう  4     NULL   NULL 問う形になると思います。

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.2

UPDATE 売上高 SET 売上高.変換売上コード = HOGE.得意先コード ,売上高.売上名 = HOGE.得意先名 ( SELECT 得意先コード,得意先名 FROM 変換マスタ WHERE 売上高.変換売上コード = 変換マスタ.変換コード ) HOGE where HOGE.得意先コード is not null

GERRARD
質問者

お礼

2chの投稿してくれたソースでやってみたんですけど、 一般SQLエラーです。式がありませんとでます。 SET~SELECTのところででているのかな?と思います。 SELECT文は動いてますね。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

ただ単に更新後の売上高のデータが 変わってないだけじゃないのでしょうか? 変換マスタのデータ には 4がないようなので、 売上高のデータに更新が かからなかったのでしょう。

関連するQ&A

  • SQL文を教えて下さい

    VB2008、SQL Server で開発をしています。 下記の条件でデータを取得したいのですが、SQL文がうまくできず、困っています。 おわかりの方、教えてください。 仕様:得意先マスタ(得意先M)の全件と、売上テーブル(売上T)を読みます。     売上テーブルの商品コードの商品名を商品マスタ(商品M)より取得します。     得意先マスタの全得意先を取得する必要があります。     すべての得意先の売上データが存在するわけではありません。 ACCESS上でクエリを作成し、SQLビューにすると、こうなります。 inptSyoCD:画面から入力した商品コード 1,まず、クエリ1: SELECT 売上T.伝票日付, 売上T.伝票番号, 売上T.得意先コード, 売上T.明細区分, 売上T.商品コード, 商品M.商品名称 FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名 WHERE 売上T.明細区分=1 AND 売上T.商品コード= inptSyoCD ; 2,次に、実際に処理するSQL文: SELECT 得意先M.得意先コード, 得意先M.得意先名称,       クエリ1.伝票日付, クエリ1.伝票番号, クエリ1.明細区分, クエリ1.商品コード, クエリ1.商品名  FROM 得意先M LEFT JOIN クエリ1 ON 得意先M.得意先コード = クエリ1.得意先コード ORDER BY 得意先M.得意先コード,売上T.伝票日付,売上T.商品コード; この2つをひとつのSQL文にする方法がわかりません。 よろしくお願いいたします。

  • 異なるデータベース間のテーブル結合

    DB名:db1 TABLE名:得意先マスタ DB名:db2 TABLE名:ユーザマスタ 以上のように、異なるデータベースに存在する2つのテーブルをLEFT JOINさせたいです。 結合条件は ユーザマスタ.得意先コード = 得意先マスタ.得意先コード とします。 この場合の結合方法を教えてください。 以下のようなSQL文を書いても駄目でした。 SELECT * FROM db1.ADMINISTRATOR.得意先マスタ AS  得意先マスタ   LEFT OUTER JOIN db2.ADMINISTRATOR.ユーザマスタ AS ユーザマスタ ON ユーザマスタ.得意先コード = 得意先マスタ.得意先コード よろしくお願いいたします。

  • SQL文について

    下記の3つのテーブルがあります。 ・社員マスタ(TBL_SHAIN) ・得意先マスタ(TBL_TOKUI) ・地域マスタ(TBL_AREA) 各テーブルのフィールドは下記の通りです。 ・社員マスタ(TBL_SHAIN)  ・社員コード(shain_code)  ・社員名(shain_name)  ・役職タイプ(post_type)  ・地域コード(area_code) ・得意先マスタ(TBL_TOKUI)  ・得意先コード(tokui_code)  ・得意先名(tokui_name)  ・地域コード(area_code) ・地域マスタ(TBL_AREA)  ・地域コード(area_code)  ・地域(area_name)  ・分類コード(kind_type) ※社員マスタ(TBL_SHAIN)の地域コード(area_code)は配列型です。 社員マスタの地域コードには下記のような配列データが格納されています。 ・「{E01,E02,S01,T01,C03}」  ※この値は地域マスタ(TBL_AREA)の地域コード(area_code)です。 試しに 下記のSQLで配列データを下記のような形式に変換。  SELECT chr(39) || array_to_string(area_code, ''',''') || chr(39) FROM TBL_SHAIN;   「'E01','E02','S01','T01','C03'」 上記で出力した値('E01','E02','S01','T01','C03')で得意先マスタを検索できるかと思って下記のSQLを実行。 SELECT * FROM TBL_TOKUI WHERE area_code IN (SELECT chr(39) || array_to_string(area_code, ''',''') || chr(39) FROM TBL_SHAIN); 結果は空でした。 やりたい事は社員マスタ(TBL_SHAIN)の地域コード(area_code)と地域マスタ(TBL_AREA)の地域コード(area_code)を結合し、また得意先マスタ(TBL_TOKUI)の地域コード(area_code)と結合しようと考えています。 みなさんにアドバイスいただきたいのは社員マスタと得意先マスタと地域マスタを結合するにはどのようにしたらいいでしょうか。 また社員マスタの地域コードに該当する得意先を参照するにはどうしたらいいでしょうか。 どうか宜しくお願いします。

  • [Excel ADO]合計額の挿入は可能ですか?

    Excel2007のADOを使ってCSVファイルのデータを集計する方法を習得中です ある業務アプリからエクスポートしたデータなのですが、 売上伝票データ: 伝票日付、伝票番号、取引先名、明細番号、商品名、数量、単価、金額、取引区分、納入先コード 納入先コードテーブル: 納入先コード、納入先名 取引区分が0なら売上、1なら入金(入金伝票の場合納入先コードがNULL) これを集計して売上明細表をつくるとして、 伝票毎に伝票合計額、および納入先名を挿入するようなことが SQL文だけで可能でしょうか?

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

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

  • SELECT 文の書き方

    SQLServer 2005 使用中です。 以下のような2つのテーブルがあります。 ・売上テーブル(T_URI)   商品コード,商品名,売上日   0001,りんご,2009/08/01   0002,ごりら,2009/08/01   0003,ラーメン,2009/08/01 ・企画テーブル(T_KIKAKU)   企画コード,企画名,商品コード,期間開始日,期間終了日,更新日   01,大売出し,0001,2009/08/01,2009/08/04,2009/08/04 12:34:56   02,サマーセール,0003,2009/08/03,2009/08/10,2009/08/06 13:55:12   03,売り尽くし,0001,2009/08/01,2009/08/02,2009/08/01 12:34:10 【やりたいこと】  以下のように商品ごとに、最新の企画名を表示させたく思っています。   商品コード,商品名,売上日,企画コード,企画名   0001,りんご,2009/08/01,01,大売出し     ※1   0002,ごりら,2009/08/01,NULL,NULL      ※2   0003,ラーメン,2009/08/01,NULL,NULL     ※3  ※1「りんご」は2つのテーブルに跨っているが、更新日が新しいものを表示  ※2「ごりら」は企画テーブルに無いのでNULL  ※3「ラーメン」は企画テーブルにあるが、期間外なのでNULL 【やってみたこと】  以下のような SQL 文を流すと、   SELECT T_URI.商品コード, T_URI.商品名, T_URI.売上日,       T_KIKAKU.企画コード, T_KIKAKU.企画名   FROM T_URI LEFT JOIN T_KIKAKU    ON (T_URI.商品コード = T_KIKAKU.商品コード)    AND (T_URI.売上日 Between T_KIKAKU.期間開始日 And T_KIKAKU.期間終了日)   ORDER BY T_URI.商品コード  このように余計な行まで出てしまいます。   商品コード,商品名,売上日,企画コード,企画名   0001,りんご,2009/08/01,03,売り尽くし    ←これがいらない。   0001,りんご,2009/08/01,01,大売出し   0002,ごりら,2009/08/01,NULL,NULL   0003,ラーメン,2009/08/01,NULL,NULL  ここからどのように SQL 文を記述すれば良いでしょうか。

  • SQLについて

    SQL初心者です。ご質問させていただきます。 得意先マスタ(得意先CD、得意先分類CD、得意先名)←T [得意先分類CDは重複] 得意先分類マスタ(得意先分類CD、得意先分類名)←B 売上履歴(得意先CD、売上金額)←U というようなマスタが存在した場合に得意先分類CDで集計して、 (得意先分類CD、得意先分類名、売上金額)というようなデータを抽出したくて、下記のようなSQLを作成したのですが、うまくいきません。 SELECT U.得意先分類CD,B.得意先分類名,U.売上金額 FROM T,B,U WHERE T.得意先CD = U.得意先CD AND T.得意先分類CD = B.得意先分類CD GROUP BY B.得意先分類CD  よろしくお願いいたします。

  • SQL文 グループ集計TOPに対する明細

    すみません、教えてください。 得意先の売上額上位10社のそれぞれについて、仕入合計額上位10商品のリストを出力するSQL 文をがわからなくて困っています。 できれば、一般的なSQL文(SQL92)でお願いします。 テーブルは、下記の2つです。 -------------------------------------------- ・t_売上明細  売上日  得意先コード  商品コード  売上金額 ・t_商品マスタ  商品コード  仕入単価 <出力>====================================== 得意先コード, 売上合計,商品コード,仕入額合計 -------------------------------------------- C3 \300100    A08 \32500     A04 \31000     ~~~    A10 \30000(Top10) C2 \200200    A05 \22500    A04 \21000     ~~~     A10 \20000(Top10) ~~~ ~~~ C10 \1000(Top10)    A97 \500    A14 \100    ~~~    A96 \10(Top10) ================================

  • CSVファイルからEXCELへのインポート

    下記の項目のCSVファイルをEXCELにインポートしようと思っております。 得意先コード、得意先名(漢字)、商品コード、商品名、売上数量、売上金額 このCSVファイルをEXCELにインポートする際、得意先ごとに別のシートにしたい(シート名は得意先名としたい)場合どのようにすればよいのか、アドバイスいただければと思っております。 宜しくお願い致します。

  • sql2005 UPDATEの質問なのですが、先日jamshid6さん

    sql2005 UPDATEの質問なのですが、先日jamshid6さんに 顧客毎の累計金額を顧客マスタへupdateの方法を教えて もらったのですが、期間の日付がnullの場合が発生すること があり、nullの場合は、全データ対象となる書き方を教えて 下さい。 (1) update 顧客マスタ set 累計金額=B.累計金額 from 顧客マスタ as A inner join (select 顧客コード,sum(売上金額) as 累計金額 from 売上データ where 売上日付 between '2010/03/01' and '2010/06/30' group by 顧客コード) as B on A.顧客コード=B.顧客コード (2) あと、顧客マスタには、生年月日があり、本日日付より年齢を求めて 顧客マスタの年齢にupdateすることは可能ですか? これも、生年月日がnullの時もあるので、その場合は、年齢を0にした いと思います。 顧客マスタ...顧客コード、生年月日(datetime)、年齢(int) 宜しくお願いします。