• 締切済み

PL/SQLを使用した、プログラミング方法について

今、独学でPL/SQLについて学習しているのですが、下記の問題が解けません。。。 考えても、自分の答えが出ないので質問させてください。 ------------------------------------------------------------ 下記の表(temp表)をPL/SQLのカーソルを使い取得しました。 temp表:主キー=No ------------------ No,ID, 処理, 数値 1 , A, 加算(1), 1000 2 , A, 加算(1), 500 3 , A, 減産(2), 500 4 , A, 加算(1), 100 ----------------- 5 , B, 加算(1), 200 6 , B, 減産(2), 100 7 , B, 加算(1), 50 ------------------ 8 , C, 加算(1), 100 9 , C, 減産(2), 50 ※加算の場合、値は「1」減算の場合、値は「2」です。 (1)その後、取得した値を使って、ID別の数値残高を計算したいです。 「加算」「減算」の区別は、「処理」カラムを使って区別をつけたいです。 例:ID「A」の数値残高 = 1000+500-500+100   ID「B」の数値残高 = 200+100-50 (2)1つのIDの計算が終了したら、次のIDの計算が始まる。 例:ID「A」の数値残高が計算終了→ID「B」の残高計算開始→ID「C」の残高計算開始 (3)その後、(2)で計算した値を、ほかのテーブル(answer)に挿入したいです。 例: answer表 ID, 数値残高 -------------- A, 1100 B, 150 C, 50 このような処理をPL/SQLを使って、実装したいのですが。 (1)(2)(3)の処理を教えて頂けないでしょうか? ※1つのIDあたり、1万レコードを持っています。 パフォーマンス(処理速度)も考えて、プログラミングしたいです。 もし、カーソルを使って表を取得する意外に、よい方法があるならば、そちらの方法でも可能です。 ご教授・ご回答よろしくお願いします。質

みんなの回答

回答No.3

insert into answer( select id,sum(case syori when '1' then to_number(suti) else to_number(suti) * -1 end) from temp group by id )

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

> 加算の場合、「1」のみではなく。処理カラムの値が「1、3、5」のどれか。 > 減算の場合、「2」のみではなく。処理カラムの値が「2、4、6」のどれか。 可能かと。mod2を考えれば。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

>加算の場合、値は「1」減算の場合、値は「2」です。 これを1と-1に変えれば、集計SQL一発でできるかと。

ghostsweep
質問者

お礼

ありがとうございました。

ghostsweep
質問者

補足

返信ありがとうございます! ソース解読させてください。。。 すみません、質問が増えてしまいました。 もし、 加算の場合、「1」のみではなく。処理カラムの値が「1、3、5」のどれか。 減算の場合、「2」のみではなく。処理カラムの値が「2、4、6」のどれか。 となった場合は、実装可能なのでしょうか? 最後の質問なので、どうかよろしくお願いします。

関連するQ&A