SQL2008のクエリでテーブルBにデータを挿入する方法

このQ&Aのポイント
  • SQL2008のクエリを使用して、テーブルAの特定の条件を満たすデータをテーブルBに挿入する方法について教えてください。
  • テーブルAには会員情報とポイント数があり、テーブルBにはランキング情報があります。テーブルAの特定の条件を満たす場合に、テーブルBにデータを挿入したいです。
  • クエリでテーブルAの特定の条件を判定し、条件を満たす場合にテーブルBにデータを挿入する方法について教えてください。
回答を見る
  • ベストアンサー

SQL2008 クエリ文について

いつも皆様に助けていただいてます。 過去に色々聞いているものの、なかなか応用が利かず・・・今回もご支援下さい。 SQL2008に、1つのDBを作っていて、その中にテーブルAとテーブルBがあります。 テーブルAには、1つの会員Noにつき3つのSEQ1~3の行があって、それぞれにポイント数が入ってます。 テーブルA 会員No  SEQ   Point 1001     1     20 1001     2     30 1001     3     50 1002     1     15 1002     2     10 1002     3      0  テーブルBには、1つの会員につき最大10個のSEQが付きますが、今は殆どカラッポです。 テーブルB 会員No  SEQ  Rank 1001    1    5 1002    1    5 やりたいことは、テーブルAのSEQ1のポイント数が99以外なら、テーブルBに テーブルAの「会員NO」、SEQ「7」、Rank「1」 の行を挿入したいです。 クエリ実行後のテーブルB 会員No  SEQ  Rank 1001    1    5 1001    7    1 1002    1    5 1002    7    1 テーブルAのSEQ1のPointが99以外なら、テーブルBに「会員No」とSEQ「7」 とRank「1」を挿入、という概要です。 クエリで可能でしょうか? 先ずは自力である程度やってみるのが筋なんでしょうが、時間が無いので聞いてしまいます。 何卒よろしくお願いします。

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

  • ベストアンサー
  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.2

insert into テーブルB(会員NO,SEQ,Rank) select a.会員NO,'7','1' from テーブルA as a where SEQ = '1' and Point <> '99' ん?単純に、こういうこと??? ただし、 ・一発処理。(定期実行なんぞ考慮してないです。データを用意する目的で、全部データがそろってる状態~で最初に一発だけ流すようなもんです。 ・重複なんぞ考慮してない。(だからこその一発処理。ではあるけど。ついでに言うと、テーブルBで会員Noでプライマリとってあったりしたら入らないけどね。うん。(まぁ、クエリ実行後のテーブルBを見た限りは、大丈夫か。うん。 定期処理にしたりするのなら、not existsとかでも使ってやる必要があるかと思います。 まぁ、 select a.会員NO,'7','1' from テーブルA as a where SEQ = '1' and Point <> '99' とりあえず、コレだけで実行してみてください。

zenigata711
質問者

お礼

バッチリ出来ました! 完璧でした! ありがとうございます!

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

要件がいま一つ分らないのですが ・テーブルAのSEQが1でRANKが99以外のものがあった場合INSERTを実行するのか ・テーブルAのSEQが1でRANKが99のものがなかったらINSERTするのか どちらでしょう。 また、どちらの場合も会員No、SEQでバッティングするケースが考えられますがその場合の仕様はどうなっているのでしょうか。

zenigata711
質問者

補足

分かり難く、すみません。 1つ補足しますと、前提として、テーブルBには、SEQ7の行は存在しません。 その上で、 テーブルAのSEQ = 1 and  Point <> 99 であれば、 テーブルBに、同会員Noと、SEQ = 7 、 Rank = 1 を挿入 というイメージです。

関連するQ&A

  • SQL2008 クエリ文について

    いつも助けてもらってます。 皆様ありがとうございます。 以下の内容で1つのテーブルを更新するクエリを作りたいのですが、どうしたら良いでしょうか? 本見て自力で考えれば良いんでしょうが、、、、よろしくお願いします。 1つのテーブル、「A」があるとしまして、その中には会員Noや、SEQ、Point、Point2といった 列があります。 1つの会員Noに、3つの行、SEQ1~3が必ずあります。 更新したい行はSEQ1だけです。 Pointは整数で、Point2は小数点第一位までの表記です。 テーブルA 会員No  SEQ   Point   Point2 1001     1     20    99.0 1001     2     30    99.0 1001     3     50    15.5 1002     1     99    10.2 1002     2     99    21.6 1002     3     99     10.0 やりたい事は、 SEQ1の中で、 Pointが99以外でPoint2が99.0なら、Point2へPointの数値を移したい。 Pointが99でPoint2が99.0以外なら、PointへPoint2の四捨五入した数値を移したい。 要するに、SEQ1のPoint,Point2、片方だけ99、という現状がマズイので直したい。 という内容です。 会員No  SEQ   Point   Point2 1001     1     20    20.0 ←更新 1001     2     30    99.0 1001     3     50    15.5 1002     1     10    10.2  ←更新 1002     2     99    21.6 1002     3     99     10.0 上記の様になれば、、と思います。 何卒ご指南くださいませ。

  • SQL2005 のクエリ文について

    いつもありがとう御座います(ご回答いただいた皆様)。 ちょっと悩んでおりますので何かヒントを頂けたら・・・よろしくお願いします。 テーブルAに「会員No」と「来店ポイント」、という列があったとします。 テーブルBにも「会員No」と「来店ポイント」があったとします。 AB両方の会員Noは=です。 テーブルAの「来店ポイント」が間違っているので、テーブルBの「来店ポイント」と 差し替えたいのですが、どの様なクエリになるのでしょうか? 自力で何とかなるかな、、と思い2時間ほど粘りましたが、上手くいかないので・・・ (中堅外食チェーンの板前をしてますが、何故かサーバ管理者までしてます。 若いというだけで・・・そんな環境なので聞ける人も居らず、いつもここが頼りになってます。 すみません) 何卒、よろしくお願いします。

  • SQL2008 クエリ文について

    いつもお世話になっております。 一応30分ほど自力で考えましたが、断念しました。 どなたかご教授下さい。 テーブルAの中に、以下の様なデータがあるわけですが、 KAINo SEQ  0001    1 0001    2 0001    3 0001    5 0002 1 0002 5 1つのKAINoに対して、存在するSEQがバラバラなので、全てのKAINoにSEQ1~7を 作るクエリを流したいのです。 (↑をこんな感じに↓) KAINo SEQ  0001 1 0001 2 0001 3 0001 4 0001 5 0001 6 0001 7 0002 1 (略)  0002 7 どの様なクエリになるのでしょうか? そもそもクエリで可能なのでしょうか? どうぞ、よろしくお願い申し上げます。

  • SQLの書き方

    わからないので質問をさせて頂きます。 テーブルAに、money、rank、name、IDと言うカラムがあります。 テーブルBに、IDとpointと言うカラム名があります。 テーブルAのIDを指定し、テーブルBに同じIDが存在する場合 テーブルAとBの値を取得するSQLを書いています。 Select テーブルA.money,テーブルA.rank テーブルA.name,テーブルA.ID,テーブルB.point FROM テーブルA,テーブルB Where テーブルA.ID = '5'; このように書くとmoney,rank,name、IDは重複して表示がされ pointに関してはすべてのpointが表示されてしまいます…。 重複するのでdistinctを使ったのですが うまくいかず…。 SQL初心者ですが、よろしければ教えてください。

    • ベストアンサー
    • MySQL
  • MERGE文を単体テーブルに対して行いたい

    Oracle初心者です。 宜しくお願い致します。 MERGE文を1つのテーブルに対して行いたいのですが、エラーになってしまいます。 すみませんが、教えて下さい。 MERGE INTO TEST A USING TEST B ON (A.SEQ_NO = B.SEQ_NO AND A.SEQ_NO2 = B.SEQ_NO2 AND A.SEQ_NO3 = B.SEQ_NO3) WHEN MATCHED THEN UPDATE文 WHEN NOT MATCHED THEN    INSERT文;

  • GROUP化した時の最適なSQL文の書き方

    いつも勉強させて頂いています。 GROUP化した時に応答時間がかかるので、 短縮したいのですが、方法をご教示願います。 SQLSERVER2005 EXPRESS VB2008 テーブルA(注文NO、手配日付、品名、手配数) テーブルB(入荷NO、注文NO、入荷数、単価) テーブルAの注文NOに対して複数の入荷があります。 テーブルAの注文NOに対して未入荷の場合も「0」で出力します。 出力(注文NO、品名、入荷累計、平均単価、合計金額) SQL文を書く時に、注文NOでGROUP化してから抽出(手配日付)すると レコード件数が多いため、応答時間がかかってしまいます。 どのような書き方がよろしいでしょうか? この書き方では、時間がかかります。 SELECT テーブルA.注文NO, テーブルA.手配日付, テーブルA.品名, テーブルB2.入荷数, テーブルB2.単価 FROM テーブルA LEFT OUTER JOIN (SELECT 注文No, SUM(入荷数) AS 入荷数, AVG(単価) AS 単価 FROM テーブルB GROUP BY 注文No) AS テーブルB2 ON テーブルA.注文NO = テーブルB2.注文No WHERE (テーブルA.手配日付 = '2008/01/01') すべてのレコードをグループ化してから処理しているため、遅いと思います。 よろしくお願いいたします。

  • 【Access2007】クエリを教えてください

    Access2007を使用しています。 以下のような3つのテーブルがあります。 テーブルA No    項目a 1     ○ 2     ○ 3     ○ 5     ○ テーブルB No    項目b 1     ○ 4     ○ 5     ○ テーブルC No    項目c 1     ○ 2     ○ 4     ○ 6     ○ これらの3つのテーブルから以下の結果を返すクエリはどうすればいいのでしょうか? No    項目A   項目B   項目C 1     ○     ○     ○ 2     ○            ○ 3     ○ 4            ○     ○ 5     ○     ○ 6                  ○

  • ACCESSクエリでの結合の仕方・・・SQL文かも

    ACCESS 2003を使用しています。 テーブルA テーブルB の2テーブルでクエリを作っています。 結合的には・・・ テーブルAのフィールドX ⇔ テーブルBのフィールドY です。 これで2テーブルに共通する一致データのみ抽出はできるのですが、 2テーブルに共通する一致データに加えて、 2テーブルの不一致データも一緒にクエリ表示されるようにしたいのです。 欲しいのは抽出イメージは、以下のような感じのクエリ結果です。 テーブルA:フィールドX|テーブルBのフィールドY a             |(空) (空)           |b c             |c d             |(空) (空)           |e f              |f  g             |(空) h             |h おそらく、SQL文を書く必要があるとは、想像できるのですが・・・ どなたか、ご教授いただけると助かります。 よろしくお願いします。

  • SQL文にて

    調べたり聞いたりしたのですが なかなか解らなかったので、質問させてください。 AテーブルとBテーブルとがあり、Aテーブルのみにしか 存在しないデータを一発で取得することはできるのでしょうか? Aテーブルのデータ数(100件) Bテーブルのデータ数(80件) Aのキー項目とBのキー項目とは同一です。 処理をしたい事はAとBとでAにしか存在しないデータを ループせずに一回のSQLで行えたらと思っています。

  • SQL文の書き方について

    お世話になります。下記のような結果を求めるSQL文についてどなたかご教示をお願いします。 以下の2つのテーブル(SMPL_TBL1,SMPL_TBL2)があったとします。 (SMPL_TBL1) ID | NAME | BUSHO ---+--------+--------- 01 | YAMADA | A_GRP 02 | SUZUKI | A_GRP 03 | OKADA | B_GRP 04 | TAKAGI | C_GRP (SMPL_TBL2) ID | POINT | ---+-------+- 01 | 1 | 01 | 2 | 01 | 3 | 02 | 1 | 02 | 2 | 03 | 1 | 04 | 1 | 04 | 2 | 04 | 3 | 04 | 4 | 04 | 5 | 上記テーブルから以下のような結果を得たい場合、 どのようなSQL文を投げればいいでしょうか? (求める結果) ・各人ごとのPOINTのMAX値と各人のデータを抽出(POINTは1~999までの整数です) ID | NAME | POINT| BUSHO ---+--------+------+-------- 01 | YAMADA | 3 | A_GRP 02 | SUZUKI | 2 | A_GRP 03 | OKADA | 1 | B_GRP 04 | TAKAGI | 5 | C_GRP よろしくお願いいたします。