プロが教えるわが家の防犯対策術!

いつも皆様に助けていただいてます。
過去に色々聞いているものの、なかなか応用が利かず・・・今回もご支援下さい。

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」を挿入、という概要です。

クエリで可能でしょうか?
先ずは自力である程度やってみるのが筋なんでしょうが、時間が無いので聞いてしまいます。
何卒よろしくお願いします。

A 回答 (2件)

要件がいま一つ分らないのですが


・テーブル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 を挿入 というイメージです。

補足日時:2012/04/26 09:59
    • good
    • 0

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'

とりあえず、コレだけで実行してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/26 12:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!