Nie wiem jak się za to zabrać :/ PL/SQL

0

pobrania.png- to są pobrania dla magazynu gdzie nasze id jest unikalne (439, 441, 442)

wydania.png - to są z kolei wydania, epdm_id odpowiadają id z pobrań

Muszę sprawdzić czy rozliczenia są prawidłowe tj. Pobrania(439 - 53 szt) = wydania(445,447 i 449 - 53szt) jeżeli nie to muszę zaznaczyć że dla tego ID.pobrania = 239 coś jest nie tak.
Męczyłem się z tym dzisiaj cały dzień tworząc pętle podwójne, tabele indeksowaną... ale zawszę mi coś się nie zgadzało

-Te dane są pobierane z tej samej tabeli

  • Grupowanie po ID i wykoanie różnicy pomiędzy pobrania.Id i wydania.epdm_id nie daje zamierzonego efektu. Chcę przyrównać do pobrania.ID każdy rekord z wydania.epdm_id

Proszę o jakieś sugestie.
Pozdrawiam.

4

Po pierwsze skąd się wzięło id pobrania 239? Chyba miało być 439, ale nie ważne...

Po drugie:

WITH wydania_cte AS (

SELECT epdm_id, SUM(ilosc) as suma_wydania FROM wydania GROUP BY epdm_id

)

SELECT p.id, (p.ilosc - w.suma_wydania) as roznica FROM pobrania p, wydania_cte w WHERE p.id = w.epdm_id

I już masz różnicę, tam gdzie roznica jest inna niż 0 = jest coś nie tak

0

@TomRZ:
Dzięki za wskazówkę, nie wiedziałem że jest taka opcja. Jednak kierownikowi zależy żeby to zrobić w pętli podwójnej, jestem nowym programistą i dostaje różne zadania gdzie często będę musiał korzystać z takich rozwiązań w przyszłości. Tego grupowania nie mogę wykorzystać też ze względu na kolejność(sorki nie wspomniałem o tym wcześniej), ważne jest też to żeby sprawdzać czy w dobrej kolejności są rozliczenia (dopiero po wydaniu wszystkiego z danego id można pobierać nowe) - jeżeli to pogrupuje to tego nie będę mógł sprawdzić.

@Marcin.Miga właśnie skolerowanie tabel domyślnie działa w ten sposób że używa inner Join, ta opcja z plusem działa bo już się raz na to nadziałem.

Dzięki za pomoc a ja wracam do rzeźbienia :D

0

No to w pierwszej pętli robisz sumę z wydań - tak jak w CTE, a w drugiej porównujesz.

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