[Oracle] 按分比率計算結果更新
- 2008.02.06(水) 03:36
■したい事
・按分比率計算結果を更新
■条件
・按分比率の合計値が1になるための差分を求め、
按分比率の最大値から0.000000001づつ、加減算する
■更新イメージ
・ROWIDと必要な列を抽出
・総合計の算出
・各値を総合計値で除算、小数点第10桁で四捨五入
・除算結果を合計し、合計が1になるための差分を算出
・差分の絶対値を算出
・HOGA.A毎の絶対値加減算用数値を前レコードから足していく
・按分比率の最大値から加減算する
■実行結果
VIEW UPDATE を使いたかった... orz
・按分比率計算結果を更新
■条件
・按分比率の合計値が1になるための差分を求め、
按分比率の最大値から0.000000001づつ、加減算する
| A | B | C | D |
| ------------------------ | |||
| A | a1 | 61.5 | (NULL) |
| A | a2 | 32.0 | (NULL) |
| A | a3 | 23.0 | (NULL) |
| B | b1 | 122.0 | (NULL) |
| B | b2 | 11.5 | (NULL) |
| B | b3 | 9.5 | (NULL) |
| C | c1 | 0.3 | (NULL) |
| C | c2 | 0.3 | (NULL) |
| C | c3 | 0.3 | (NULL) |
■更新イメージ
| R1 | V1 | V2 | V3 |
| ------------------------ | |||
| AAAA | A | a1 | 61.5 |
| AAAB | A | a2 | 32.0 |
| AAAC | A | a3 | 23.0 |
| AAAD | B | b1 | 122.0 |
| AAAE | B | b2 | 11.5 |
| AAAF | B | b3 | 9.5 |
| AAAG | C | c1 | 0.3 |
| AAAH | C | c2 | 0.3 |
| AAAI | C | c3 | 0.3 |
・ROWIDと必要な列を抽出
| V1 | V2 |
| ------------ | |
| A | 116.5 |
| B | 143.0 |
| C | 0.9 |
・総合計の算出
| R1 | V1 | V2 | V3 |
| -------------------------------- | |||
| AAAC | A | a3 | 0.197424893 |
| AAAB | A | a2 | 0.274678112 |
| AAAA | A | a1 | 0.527896996 |
| AAAF | B | b3 | 0.066433566 |
| AAAE | B | b2 | 0.080419580 |
| AAAD | B | b1 | 0.853146853 |
| AAAI | C | c3 | 0.333333333 |
| AAAH | C | c2 | 0.333333333 |
| AAAG | C | c1 | 0.333333333 |
・各値を総合計値で除算、小数点第10桁で四捨五入
| V1 | V2 |
| -------------------- | |
| A | -0.000000001 |
| B | 0.000000001 |
| C | 0.000000001 |
・除算結果を合計し、合計が1になるための差分を算出
| R1 | V1 | V2 | V3 | V4 | V5 |
| ---------------------------------------------------------------- | |||||
| AAAC | A | a3 | 0.197424893 | -0.000000001 | 0.000000001 |
| AAAB | A | a2 | 0.274678112 | -0.000000001 | 0.000000001 |
| AAAA | A | a1 | 0.527896996 | -0.000000001 | 0.000000001 |
| AAAF | B | b3 | 0.066433566 | 0.000000001 | 0.000000001 |
| AAAE | B | b2 | 0.080419580 | 0.000000001 | 0.000000001 |
| AAAD | B | b1 | 0.853146853 | 0.000000001 | 0.000000001 |
| AAAI | C | c3 | 0.333333333 | 0.000000001 | 0.000000001 |
| AAAH | C | c2 | 0.333333333 | 0.000000001 | 0.000000001 |
| AAAG | C | c1 | 0.333333333 | 0.000000001 | 0.000000001 |
・差分の絶対値を算出
| R1 | V1 | V2 | V3 | V4 |
| ------------------------------------------------------------------------ | ||||
| AAAA | 0.527896996 | -0.000000001 | 0.000000001 | 0.000000001 |
| AAAB | 0.274678112 | -0.000000001 | 0.000000001 | 0.000000002 |
| AAAC | 0.197424893 | -0.000000001 | 0.000000001 | 0.000000003 |
| AAAD | 0.853146853 | 0.000000001 | 0.000000001 | 0.000000001 |
| AAAE | 0.080419580 | 0.000000001 | 0.000000001 | 0.000000002 |
| AAAF | 0.066433566 | 0.000000001 | 0.000000001 | 0.000000003 |
| AAAG | 0.333333333 | 0.000000001 | 0.000000001 | 0.000000001 |
| AAAH | 0.333333333 | 0.000000001 | 0.000000001 | 0.000000002 |
| AAAI | 0.333333333 | 0.000000001 | 0.000000001 | 0.000000003 |
・HOGA.A毎の絶対値加減算用数値を前レコードから足していく
| R1 | V1 |
| ------------------------ | |
| AAAA | 0.527896995 |
| AAAB | 0.274678112 |
| AAAC | 0.197424893 |
| AAAD | 0.853146854 |
| AAAE | 0.080419580 |
| AAAF | 0.066433566 |
| AAAG | 0.333333334 |
| AAAH | 0.333333333 |
| AAAI | 0.333333333 |
・按分比率の最大値から加減算する
■実行結果
| A | B | C | D |
| ---------------------------- | |||
| A | a1 | 61.5 | 0.527896995 |
| A | a2 | 32.0 | 0.274678112 |
| A | a3 | 23.0 | 0.197424893 |
| B | b1 | 122.0 | 0.853146854 |
| B | b2 | 11.5 | 0.080419580 |
| B | b3 | 9.5 | 0.066433566 |
| C | c1 | 0.3 | 0.333333334 |
| C | c2 | 0.3 | 0.333333333 |
| C | c3 | 0.3 | 0.333333333 |
VIEW UPDATE を使いたかった... orz
コメント
コメントの投稿