Złożone zapytanie SQL z sumowaniem - (FireBird)

Odpowiedz Nowy wątek
2007-01-07 19:17
Dice
0

Witam
mam problem z utworzeniem zapytania łączącego wyniki z trzech tabel. Proszę o jakieś wskazówki.

UMOWA

ID_UMOWA | NR_UMOWY | DATA_ZAW | IMIE_NAZWISKO |

           1 |                1 | 2007-01-04 | Kowalski             |                              
           2 |                2 | 2007-01-07 | Nowak                |

PRZEDMIOT

ID_PRZEDMIOT | ID_UMOWA | NAZWA | PRZYJETYCH_SZT |

                 1  |               1 | Przedmiot1 |                         3 |
                 2  |               1 | Przedmiot2 |                         2 | 
                 3  |               2 | Przedmiot3 |                         2 |

SPRZEDAZ

ID_SPRZEDAZ ID_PRZEDMIOT LICZBA_SZT
   1    1   1
   2    1    2
   3     2   1
   4    2    1
   5    3    1
   6    3    2

ZWROT ZAKUPU

ID_ZWROT | ID_SPRZEDAZ | ID_PRZEDMIOT | LICZBA_SZT |

          1 |                    1 |                      1 |                  1 |                                           
          2 |                    2 |                      1 |                  1 |
          3 |                    3 |                      2 |                  1 |
          4 |                    5 |                      3 |                  1 |
          5 |                    6 |                      3 |                  1 |
          6 |                    6 |                      3 |                  1 |

OCZEKIWANY WYNIK ZAPYTANIA

==============
DLA ID_UMOWA=1


NAZWA | PRZYJETYCH | SPRZEDANYCH | ZWROCONYCH | SPRZED_FAKTYCZNIE | DOSTEPNYCH |

Przed1 | 3 | 3 | 2 | 1 | 2 |
Przed2 | 2 | 2 | 1 | 1 | 1 |

==============
DLA ID_UMOWA=2


NAZWA | PRZYJETYCH | SPRZEDANYCH | ZWROCONYCH | SPRZED_FAKTYCZNIE | DOSTEPNYCH |

Przed3 | 2 | 3 | 3 | 0 | 2 |

Utworzyłem zapytanie ale działa poprawnie tylko w pierwszym przypadku.
W drugim sprzedanych pokazuje 5 a nie jak powinno 3.


SELECT 
  PRZEDMIOT.ID_PRZEDMIOT,
  PRZEDMIOT.NAZWA,
  PRZEDMIOT.PRZYJETYCH_SZT AS PRZYJETYCH,
  SUM(SPRZEDAZ.LICZBA_SZT) AS SPRZEDANYCH,
  SUM(ZWROT_Z.LICZBA_SZT) AS ZWROCONYCH
FROM
  PRZEDMIOT
  INNER JOIN SPRZEDAZ ON (PRZEDMIOT.ID_PRZEDMIOT = SPRZEDAZ.ID_PRZEDMIOT)
  LEFT OUTER JOIN ZWROT_Z ON (SPRZEDAZ.ID_PRZEDMIOT = ZWROT_Z.ID_PRZEDMIOT)
  AND (SPRZEDAZ.ID_SPRZEDAZ = ZWROT_Z.ID_SPRZEDAZ)
WHERE
  (PRZEDMIOT.ID_UMOWA = 1)
GROUP BY
  PRZEDMIOT.ID_PRZEDMIOT,
  PRZEDMIOT.NAZWA,
  PRZEDMIOT.PRZYJETYCH_SZT
`</code>`

Pozostało 580 znaków

2007-01-07 22:14
0

może byś tak łaskawie napisał co to zapytanie ma zwracać...


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2007-01-08 09:32
Dice
0

Napisałem już co chciałbym uzyskać.
sumę przyjętych;
sumę sprzedanych;
sumę zwróconych;
sumę faktycznie sprzedanych (czyli suma sprzedanych - suma zwróconych)
sumę dostępnych (czyli suma przyjetych - suma faktycznie sprzedanych)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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