Jeden wynik z dwóch zapytań

0

Witam.
Potrzebuje nakierowania jak zrobić zapytanie do bazy danych, aby wynik był jeden, porównawczy. Chodzi o listę pozycji na dokumencie. Przykład:
Dokument WZ/2/2018/2

  • Towar1 | Ilość: 5
  • Towar2 | Ilość: 10
  • Towar3 | Ilość: 8

Został on wygenerowany na podstawie dwóch dokumentów

RO/1/2018/2

  • Towar1 | Ilość: 5
  • Towar2 | Ilość: 15

RO/2/2018/2

  • Towar3 | Ilość: 10

Oczywiście mogę zrobić 3 różne zapytania i całe porównanie robić po stronie programu, ale wolałbym mieć odpowiedź już pod stronie bazy danych, ponieważ pozycje na dokumencie WZ decydują o tym jaką informację mam wysłać klientowi. Próbowałem sobie poradzić z pomocą EXCEPT i INTERSECT

select TrE_TwrKod, TrE_TwrEAN, TrE_Ilosc from CDN.Traelem
where TrE_TrNId in (249554, 249555) --DOKUMENTY RO
except  
select TrE_TwrKod, TrE_TwrEAN, TrE_Ilosc from CDN.Traelem
where TrE_TrNId in (249563) --DOKUMENT WZ
select TrE_TwrKod, TrE_TwrEAN, TrE_Ilosc from CDN.Traelem
where TrE_TrNId in (249554, 249555) --DOKUMENTY RO
intersect  
select TrE_TwrKod, TrE_TwrEAN, TrE_Ilosc from CDN.Traelem
where TrE_TrNId in (249563) --DOKUMENT WZ

Najlepszym wynikiem jaki próbuje uzyskać to:
TrE_Kod | TrE_EAN | TrE_Ilosc(WZ) | TrE_Ilosc(RO)

Jeśli jakieś pozycji na WZ nie ma, a była na RO to TrE_Ilosc(WZ) będzie null albo 0.

PS.
Tak, to Comarch Optima :)

1
SELECT TrE_TwrKod, TrE_TwrEAN, sum(CASE WHEN typ='WZ' THEN TrE_Ilosc END) ilosc_wz, sum(CASE WHEN typ='RO' THEN TrE_Ilosc END) ilosc_ro
FROM CDN.Traelem
WHERE TrE_TrNId IN (249554, 249555, 249563) 
GROUP BY 1,2
0

Takie to proste widzę... Dzięki, działa elegancko ;)

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