こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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万レコードを持っています。
パフォーマンス(処理速度)も考えて、プログラミングしたいです。
もし、カーソルを使って表を取得する意外に、よい方法があるならば、そちらの方法でも可能です。
ご教授・ご回答よろしくお願いします。質

投稿日時 - 2010-03-28 21:33:58

QNo.5786097

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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
)

投稿日時 - 2010-04-03 03:13:25

ANo.2

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

可能かと。mod2を考えれば。

投稿日時 - 2010-03-28 22:56:47

ANo.1

>加算の場合、値は「1」減算の場合、値は「2」です。

これを1と-1に変えれば、集計SQL一発でできるかと。

投稿日時 - 2010-03-28 22:00:05

補足

返信ありがとうございます!
ソース解読させてください。。。

すみません、質問が増えてしまいました。
もし、
加算の場合、「1」のみではなく。処理カラムの値が「1、3、5」のどれか。
減算の場合、「2」のみではなく。処理カラムの値が「2、4、6」のどれか。
となった場合は、実装可能なのでしょうか?

最後の質問なので、どうかよろしくお願いします。

投稿日時 - 2010-03-28 22:08:06

お礼

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

投稿日時 - 2010-04-22 13:22:51

あなたにオススメの質問