2016-03-23 23 views
0

TABLE_A ve TABLE_B var ve TABLE_B_FINAL oluşturmak gerekir.

Kural: Biz TABLE_B (satır ID_C=1 ve sütunun AFTER) karşılık gelen bir değere sahip WEIGHT değerini katlayacak
ID_C=1 değeri ve AB=AFTER değeri TABLE_A varsa.

Sonraki Örnekler: TABLE_B (satır ID_C=1 ve sütunun BEFORE) karşılık gelen bir değere sahip WEIGHT değerini katlayacak
ID_C=1 değeri ve AB=BEFORE değeri TABLE_A varsa. Biz TABLE_B (satır ID_C=2 ve sütunun AFTER) karşılık gelen bir değere sahip WEIGHT değerini katlayacak
ID_C=2 değeri ve AB=AFTER değeri TABLE_A varsa.

Bu algoritma, TABLE_A numaralı tüm kayıtları denetler ve WEIGHT değerini TABLE_B içinde karşılık gelen değerle çoğaltır.

Başlangıçta TABLE_B tüm satırlarda ve sütunlarda (AFTER ve BEFORE) 1 varsayılan değerine sahiptir. Bu değer çarpımlar sırasında değişecektir.SQL'de tablo analizi

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| 
+2

Lütfen bize şu ana kadar yaptığınız şeyleri, SQL komut dosyalarınızı ve tablo şemanızı gösterin. – stjepano

+0

Benim düşüncem, TABLE_A'yı çalıştıran ve ilk döngü içinde olacak ve değerin AFTER veya ÖNCE olup olmadığını algılayan ID_C = 1,2,3, .... n ve ikinci çevrimi araştıran bir ilk döngü yapmaktır. Ama nasıl yapacağımı bilmiyorum. – hanznv

+0

Döngüye veya döngüye gerek yoktur. Sadece table_a.ab değerine bağlı olarak doğru değerleri alın. Ve ürünü hesaplamak için yinelemeli sorguya ihtiyaç duyabilirsiniz: http://stackoverflow.com/a/36201120/2235885 – joop

cevap

1
Select TABLE_B.ID_C AS ID_C, BEFORE = 
    CASE TABLE_C.AB 
    WHEN 'BEFORE' THEN TABLE_B.BEFORE*TABLE_C.WEIGHT_N 
    ELSE TABLE_B.BEFORE 
    END, 
AFTER = 
    CASE TABLE_C.AB 
    WHEN 'AFTER' THEN TABLE_B.AFTER*TABLE_C.WEIGHT_N 
    ELSE TABLE_B.AFTER 
    END 
FROM (SELECT ID_C, AB, EXP(SUM(ln(WEIGHT_N))) FROM TABLE_A GROUP BY ID_C, AB) as TABLE_C 
JOIN TABLE_B ON TABLE_B.ID_C=TABLE_C.ID_C; 
+0

Yardımlarınız için teşekkürler :-) – hanznv