SQL2008のクエリでテーブルBにデータを挿入する方法
- 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」を挿入、という概要です。 クエリで可能でしょうか? 先ずは自力である程度やってみるのが筋なんでしょうが、時間が無いので聞いてしまいます。 何卒よろしくお願いします。
- zenigata711
- お礼率62% (48/77)
- SQL Server
- 回答数2
- ありがとう数1
- みんなの回答 (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' とりあえず、コレだけで実行してみてください。
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
要件がいま一つ分らないのですが ・テーブルAのSEQが1でRANKが99以外のものがあった場合INSERTを実行するのか ・テーブルAのSEQが1でRANKが99のものがなかったらINSERTするのか どちらでしょう。 また、どちらの場合も会員No、SEQでバッティングするケースが考えられますがその場合の仕様はどうなっているのでしょうか。
補足
分かり難く、すみません。 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 上記の様になれば、、と思います。 何卒ご指南くださいませ。
- ベストアンサー
- SQL Server
- SQL2005 のクエリ文について
いつもありがとう御座います(ご回答いただいた皆様)。 ちょっと悩んでおりますので何かヒントを頂けたら・・・よろしくお願いします。 テーブルAに「会員No」と「来店ポイント」、という列があったとします。 テーブルBにも「会員No」と「来店ポイント」があったとします。 AB両方の会員Noは=です。 テーブルAの「来店ポイント」が間違っているので、テーブルBの「来店ポイント」と 差し替えたいのですが、どの様なクエリになるのでしょうか? 自力で何とかなるかな、、と思い2時間ほど粘りましたが、上手くいかないので・・・ (中堅外食チェーンの板前をしてますが、何故かサーバ管理者までしてます。 若いというだけで・・・そんな環境なので聞ける人も居らず、いつもここが頼りになってます。 すみません) 何卒、よろしくお願いします。
- ベストアンサー
- SQL Server
- 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 Server
- 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文;
- ベストアンサー
- Oracle
- 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') すべてのレコードをグループ化してから処理しているため、遅いと思います。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- 【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 ○
- ベストアンサー
- その他MS Office製品
- 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 Server
- 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 よろしくお願いいたします。
- ベストアンサー
- SQL Server
お礼
バッチリ出来ました! 完璧でした! ありがとうございます!