Sumowanie z trzech tabel prosze o pomoc

0

Witam mam następujący problem:

zapytanie wygląda nastepująco

SELECT SUM(Cena.suma) From (( sprz INNER JOIN Fakt ON sprz.Id = Fakt.SprzId)
INNER JOIN Cena ON Fakt.IdCena = Cena.Id) GROUP BY sprz.id Having SUM(Fakt.Sum)>SUM(Cena.Suma)

Mniej więcej tak wygląda to zapytanie, podaje ona złą sumę robi to się chyba dlatego że źle działa 3 inner join to znaczy robi tabele w której Cena.suma sie powtarzają i dlatego jest zła suma.
Wiem że to to trosze zawiłe ale nie wiem jak to wytłumaczyć prościej.

Jeśli ktoś by miał pomysł jak to rozwiązać to będę wdzięczny.

Pozdrawiam

0

może byś napisał co masz w tych tabelach i co chcesz osiągnąć najpierw :>

0

w tabeli sprz są klienci, w tabeli Cena są Ceny towarów, Fakt są faktury za dany towar , chodzi mi o takie połączenie aby dostać sumę Cen towarów i sumę faktur dla danego klienta, gdzie suma faktur jest różna o sumy Cen, O coś takiego mi chodzi.

Chyba tak najprościej mogę to zobrazować.
był już kiedyś podobny temat lecz nikt nie odpowiedział, a mi chodzi o coś takiego tylko że jeszcze warunek żeby sumy byly różne
Złożone zapytanie SQL z sumowaniem - (FireBird)

0
SELECT 
  Fakt.SprzId as IdKlient, SUM(Cena.suma) as SumaCen, SUM(Fakt.Sum) as SumaFaktur
FROM 
  Fakt JOIN Cena ON Fakt.IdCena=Cena.Id  
GROUP BY
  Fakt.SprzId
HAVING
  SUM(Cena.suma) <> SUM(Fakt.Sum)
0

dzięki za odpowiedz ale to nie rozwiązuje problemu bo problem jest troszkę bardziej złożony
w Tabeli "sprz" mam Klientów a w tabeli "Fakt" sprzedaż natomiast w tabeli" Cena " jakiś koszt
Chodzi o to żeby sprawdzić dla każdego klienta czy Suma z tabeli fakt jest rożna od sumy z tabeli Cena
ale może sie zdażyć że danego klienta nie ma w tabeli Fakt albo w tabeli Cena a wtedy chciałbym żeby pokazało dla tego klienta sume z jedne i z drugiej, gdy go NIE MA to po prostu Suma równa 0

A to zapytanie pokaże mi tylko klientów którzy są w tabeli Fakt i w tabeli Ceny i maja różne sumy

Starałem sie zrozumiale to napisać mam nadzieje że tak jest.

0

jak chcesz mieć dwie niezależne od siebie sumy to nie zrobisz tego tak - możesz zrobić to jako procedurę bo poszczególne sumy musisz liczyć osobno

0

Z Twojego zapytania wnioskuję, że tabela SPRZ jest w relacji z tabelą FAKT, a tabela FAKT jest w relacji z tabelą CENA.
Stąd, jeśli nie istnieje faktura dla danego klienta, nie istnieje też koszt z tabeli CENA, więc obie wartości wg Twoich założeń będą równe 0.
Skoro będą równe nie powinny się znaleźć w zbiorze wynikowym.

Chyba że tabela SPRZ jest powiązana z tabelą CENA:

SELECT
  IFNULL(c.IdKlient,f.IdKlient) IdKlient, c.suma Cena, f.suma SumaFakt
FROM
  (SELECT IdKlient, SUM(suma) suma FROM Cena GROUP BY IdKlient) c
  FULL OUTER JOIN
  (SELECT IdKlient, SUM(Sum) suma FROM Fakt GROUP BY IdKlient) f
  ON c.IdKlient=f.IdKlient
WHERE
  c.suma<>f.suma
0

Udało mi sie z tym poradzić jeszcze sprawdzę dokładnie i zamieszczę prawidłowe zapytanie.

Dzięki wszystkim za pomoc

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