Łączenie zapytań przez Union

0

Witam,
czy ktoś mógłby pomóc w poniższym problemie?
Potrzebuję zrobić "Union" dwóch zapytań. Union zwraca wyniki z dwóch tabel. Jednak potrzebuję jeszcze zrobić jakiś "distinct", który będzie zwracał "pojedyńczo" towary. W obecnym kształcie poprzez fakt że zapytania zwracają różne ilości, towary są dublowane i występują w dwóch pozycjach. Np.

nazwaTW WartośćŚrednia JedostkaMasy

Szalik 50 szt
Szalik 5 szt
Koszula 10 szt

Potrzebuję wyświetlić:
Szalik 55 szt
Koszula 10 szt

SELECT Towary.nazwaTW,(Select sum(PozycjeZK.ilość )) As WartośćŚrednia,JednostkiMasy.nazwa FROM PozycjeZK INNER JOIN Towary ON PozycjeZK.idTowaru = Towary.idTowaru INNER JOIN JednostkiMasy ON PozycjeZK.jmPozycji = JednostkiMasy.idJM AND Towary.jm = JednostkiMasy.idJM
where PozycjeZK.idDokumentu in (select idDokumentu from DokumentyZakupu where (kontrahent in(18,19,20))
and DokumentyZakupu.dataDokumentu >='2011-01-01' and DokumentyZakupu.dataDokumentu <='2011-12-01')

         group by Towary.nazwaTW,JednostkiMasy.nazwa 

UNION

SELECT Towary.nazwaTW,(Select sum(PozycjeWNT.ilość)) As WartośćŚrednia ,
JednostkiMasy.nazwa FROM PozycjeWNT INNER JOIN Towary ON PozycjeWNT.idTowaru = Towary.idTowaru INNER JOIN JednostkiMasy ON PozycjeWNT.jmPozycji = JednostkiMasy.idJM AND Towary.jm = JednostkiMasy.idJM
where PozycjeWNT.idDokumentu in (select idDokumentu from DokumentyWNT where (kontrahent in(18,19,20))
and DokumentyWNT.dataDokumentu >='2011-01-01' and DokumentyWNT.dataDokumentu <='2011-12-01')
group by Towary.nazwaTW,JednostkiMasy.nazwa

0

zrób selecta z tych unionów z sumą po ilości.
BTW co to za dziwna konstrukcja SELECT Towary.nazwaTW,(Select sum(PozycjeZK.ilość )) As WartośćŚrednia, chodzi mi o ten pogrubiony select

0

Ten pogrubiony Select robi sumę Pozycji dokumentów po towarach. Tzn mam dokumenty Zakupu i Dokumenty WNT (dwie tabele). Oba typy dokumentów mają swoje pozycje(osobne tabele tj. PozycjeZK i PozycjeWNT).
Stąd musi byc union. Klient chce wiedzieć ile danego towaru zakupił. Kupować może zarówno poprzez dokument Zakupu jak i dokument WNT. Muszę więc wyłuskać sumę pozycji (po towarze). Suma sumarum musi być ilość danego towaru z dokumentów Zakupu i dokumentów WNT.

Jak taki select mógłby wyglądać? Próbowałem różne warianty ale bezskutecznie!

1
  1. co to za baza bo pierwszy raz widzę aby select był przed sum
  2. co to za baza bo nie wiem czy pozwala na podzapytania. jak pozwala to coś takiego
select nazwaTW, sum(WartośćŚrednia) as WartośćŚrednia, nazwa
from (
SELECT Towary.nazwaTW,(Select sum(PozycjeZK.ilość )) As WartośćŚrednia,JednostkiMasy.nazwa FROM PozycjeZK INNER JOIN Towary ON PozycjeZK.idTowaru = Towary.idTowaru INNER JOIN JednostkiMasy ON PozycjeZK.jmPozycji = JednostkiMasy.idJM AND Towary.jm = JednostkiMasy.idJM 
             where PozycjeZK.idDokumentu in (select idDokumentu from DokumentyZakupu where (kontrahent in(18,19,20)) 
              and DokumentyZakupu.dataDokumentu  >='2011-01-01' and DokumentyZakupu.dataDokumentu  <='2011-12-01') 

              group by Towary.nazwaTW,JednostkiMasy.nazwa 

 UNION

 SELECT Towary.nazwaTW,(Select sum(PozycjeWNT.ilość)) As WartośćŚrednia , 
             JednostkiMasy.nazwa FROM PozycjeWNT INNER JOIN Towary ON PozycjeWNT.idTowaru = Towary.idTowaru INNER JOIN JednostkiMasy ON PozycjeWNT.jmPozycji = JednostkiMasy.idJM AND Towary.jm = JednostkiMasy.idJM
              where PozycjeWNT.idDokumentu in (select idDokumentu from DokumentyWNT where (kontrahent in(18,19,20)) 
              and DokumentyWNT.dataDokumentu  >='2011-01-01' and DokumentyWNT.dataDokumentu  <='2011-12-01') 
             group by Towary.nazwaTW,JednostkiMasy.nazwa) x
group by nazwaTW, nazwa
0

To baza MS SQL.
Zapytanie, które napisałeś działa! O taki właśnie efekt mi chodziło! Wygląda na to że rozwiązałes mój problem! Dzięki wielkie!

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