Złączenie selectów

MT
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
mam dość chyba prosty problem. Potrzebuję zrobić sumę dwóch selectów (ilość po idTowaru).

Kopiuj
select idTowaru, sum(ilość) from PozycjeWNT
where idDokumentu in (select idDokumentu from DokumentyWNT where typDokumentu =8)
group by idTowaru
union
select idTowaru, sum(ilość) from PozycjeZK
where idDokumentu in (select idDokumentu from DokumentyZakupu where typDokumentu =4)
group by idTowaru

Próbowałem użyć klauzuli UNION ale ona nie zwraca mi sumy po idTowaru.
Czy mógłby mi ktoś pomóc?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Na moje oko to powinieneś najpierw przerobić tą bazę danych na normalną, bo to co tu masz woła o pomstę do nieba. Gdybyś jak normalny człowiek nie trzymał danych w N identycznych tabelach to nie byłoby problemu...
Musisz tutaj pokombinować jak zroić joina tych wszystkich rekordów...

AP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3079
0
Kopiuj
SELECT idTowaru, sum(ilość) FROM (select idTowaru, sum(ilość) from PozycjeWNT
where idDokumentu in (select idDokumentu from DokumentyWNT where typDokumentu =8)
union
select idTowaru, sum(ilość) from PozycjeZK
where idDokumentu in (select idDokumentu from DokumentyZakupu where typDokumentu =4))
GROUP BY idTowaru;
MT
  • Rejestracja: dni
  • Ostatnio: dni
0

To nie są identyczne tabele. Poza tymi dwoma polami występuje kilka zupełnie innych pól. Np. PozycjeZK mają Vat, Pozycje WNT nie, PozycjeWNT mają kurs, walutę, PozycjeZK nie. Różnic jest sporo dlatego zdecydowałem się na trzymanie tych danych w innych tabelach. Może nie jest to idealne rozwiązanie ale wówczas nie widziałem innej możliwości. Przebudowanie tabel łączyłoby się z kompletną przebudową działającego programu.
Myślę, że prościej byłoby zrobienie powyższego zapytania.

MT
  • Rejestracja: dni
  • Ostatnio: dni
0
AdamPL napisał(a):
Kopiuj
SELECT idTowaru, sum(ilość) FROM (select idTowaru, sum(ilość) from PozycjeWNT
where idDokumentu in (select idDokumentu from DokumentyWNT where typDokumentu =8)
union
select idTowaru, sum(ilość) from PozycjeZK
where idDokumentu in (select idDokumentu from DokumentyZakupu where typDokumentu =4))
GROUP BY idTowaru;

Dzięki Adam, tylko coś chyba jeszcze nie tak w składni, kombinuję na różne sposoby i nie wychodzi to zapytanie, błędy w składni.

AP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3079
0

Rzeczywiście zapisałem z błędem. Błąd można rozwiązać na dwa sposoby:

  1. Usunąć sum z podzapytania.
  2. Dodać GROUP BY w podzapytaniu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.