Sumowanie wartości w kolumnie - ORACLE

0

Jestem nowy na forum, więc z tego miejsca serdecznie Witam ;)

Istnieje tabela tab1:
Waga | Kod | Data1 | Data2 | Suma_waga
1 | 12 | 2 | 2 | 4
2 | 12 | 2 | 2 | 8
1 | 10 | 1 | 2 | 3
2 | 10 | 2 | 3 | 10

Druga tabela tab2:
Kod | Procent| Wartość|
12 | | |
10 | | |
15 | | |
27 | | |

Waga, Data1, Data2 - wartości wprowadzane "ręcznie' w interfejsie.
Procedura Oblicz wylicza Suma_waga jako (Data1+Data2)*Waga.
W tab2 Kod wprowadzany w interfejsie, tylko jednokrotne wystąpienie danego kodu, w tab1 kod może wystąpić wielokrotnie.

Problem:
Z uwagi na wielokrotne występowanie Kod w tab1 potrzebowałbym:

  1. Zsumować wartości w polu Suma_waga dla poszczególnych wartości z pola Kod (w przykladzie dla Kod12=4+8, dla Kod10=10+3)
  2. Tak zsumowane wartości, po podzieleniu każdej z nich przez łączną sumę wartości w polu Suma_waga (w przykładzie daje to 25), chciałbym zapisać w polu Procent, odpowiednio dla właściwego kodu, jako wartość procentową.

Trudności nastręcza mi wyciągnięcie wartości z kolumny Suma_waga. Próbowałem z sum(suma_waga) group by kod, ale nie jestem w stanie zapisać wyniku w tab2 :(
Proszę o w miarę proste rozwiązanie i wyrozumiałość - doświadczenie mam niewielkie, przejrzałem sporo wątków, ale jakkolwiek radzę sobie z sumowaniem warunkowym danych w wierszach, tak na kolumnie poległem :(

1
insert into tab2 select kod, wartosc / (select sum(suma_waga) from tab1) * 100 procent, wartosc from  (select kod, sum(suma_waga) wartosc from tab1 group by kod)
0

Nie jestem pewien, czy dobrze rozumiem, ale w wyniku otrzymuję kod, procent i wartość, które dla każdego z wyciągniętych wierszy zapisywane są do tab2 ? Nie do końca o taki efekt mi chodziło. Nie chcę (nie mogę) zmieniać wartości pola kod w tab2. Nie chcę w wyniku INSERT'a zapisywać również wartości w kolumnie wartosc w tab2. Jedyne wartości do zapisania w kolumnie procent, które są wynikiem wyliczenia, jak opisałem. Chyba, że źle zinterpretowałem podany przykład rozwiązania - dla ułatwienia zrozumienia (dla mnie) przyjmijmy, że kolumna kod nazywa się teraz kod2 w tab2 (nie pomylą mi się kolumny między tabelami ;) ), a jeżeli wartosc w insercie jest tylko aliasem proszę o zmianę na inny alias, powiedzmy WYNIK.

Prościej: Potrzebuję zapisać (może lepiej uaktualnić, bo możliwe są zmiany wartości w tab1) tylko i wyłącznie wartości w polu procent tabeli tab2, dla pojedynczych wierszy w tab2, jako wynik wykonania działania na danych z kilku wierszy dla tego samego kodu z tab1.

EDIT: Dzięki wielkie, naprowadziłeś mnie na właściwe rozwiązanie, już sobie poradziłem. Przerobiłem Twój przykład, który ostatecznie wygląda u mnie tak:

UPDATE tab2 SET procent=(SELECT procent FROM (SELECT kod, wartosc / (SELECT SUM(suma_waga) FROM tab1) * 100 procent, wartosc FROM (SELECT kod, SUM(suma_waga) wartosc FROM tab1 GROUP BY kod)) WHERE tab2.kod=tab1.kod)

Dzięki raz jeszcze ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1