私はTABLE_A
とTABLE_B
を持っていますので、TABLE_B_FINAL
を作成する必要があります。
ルール:TABLE_A
にID_C=1
とAB=AFTER
の値の値は、我々はTABLE_B
(行ID_C=1
及び列AFTER
)に対応する値とWEIGHT
の値を乗算する場合は。
次に例:TABLE_A
にID_C=1
AB=BEFORE
との値の値は、我々はTABLE_B
(行ID_C=1
及び列BEFORE
)に対応する値とWEIGHT
の値を乗算する場合は。 TABLE_A
の値がID_C=2
で、値がAB=AFTER
の場合、WEIGHT
の値にTABLE_B
(行ID_C=2
および列AFTER
)の対応する値を掛けます。
このアルゴリズムは、すべてのレコードをTABLE_A
にチェックし、その値にWEIGHT
と、対応する値をTABLE_B
で倍数にします。
最初にTABLE_B
には、すべての行と列にデフォルト値1
(AFTER
とBEFORE
)があります。この値は乗算の間に変化します。SQLのテーブル分析
TABLE_A
ID_N|WEIGHT_N|ID_C |AB | 5 |1.15 | 1 |AFTER | 12 |1.13 | 1 |BEFORE | 60 |1.65 | 3 |AFTER | 90 |1.85 | 2 |AFTER | 80 |1.45 | 3 |AFTER | 140 |1.57 | 2 |BEFORE |
TABLE_B
|ID_C |BEFORE|AFTER| |1 |1 | 1 | |2 |1 | 1 | |3 |1 | 1 |
TABLE_B_FINAL
|ID_C |BEFORE |AFTER | |1 |1*1.13=1.13 | 1*1.15=1.15 | |2 |1,57 | 1,85 | |3 |1 | 1*1.65*1.45=2.39|
これまで行ってきたことをSQLスクリプトとテーブルスキーマで見せてください。 – stjepano
私の考えは、最初のサイクルをTABLE_Aから実行し、ID_C = 1,2,3、... nと最初のサイクルの内側にある2番目のサイクルを検索し、その値がAFTERかBEFOREかを認識することです。しかし、私はそれをする方法を知らないです。 – hanznv
サイクルやループする必要はありません。 table_a.abの値に基づいて正しい値を取得するだけです。そして、製品を計算するために再帰的なクエリが必要になるかもしれません:http://stackoverflow.com/a/36201120/2235885 – joop