Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SQL zapytanie sumujące z 2 tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
ketiv
Witam wszystkich,
Mam gorącą prośbę, z rozwiązaniem takiego problemu

Tabela 1 – budzet planowany
Imie kwota miesiąc
Witek 10000 lipiec
Tomek 15000 lipiec
Witek 10000 sierpień
Tomek 10000 sierpień
Asia 25000 sierpień
.

Tabela 2 – wykonanie planu
Imie kwota miesiąc klient
Witek 5000 lipiec XYZ
Witek 8000 lipiec QWERTY
Tomek 13000 lipiec ABC
Witek 2000 sierpień XYZ
.

Potrzebuję zrobić podsumowanie wykonania budżetu:
Imie planowane$ wykonane$
Witek 20000 15000
Tomek 25000 13000
Asia 25000 0
.

Gdzie
planowane$=sum(tabela1.kwota)
wykonane$=sum(tabela2.kwota)

Niby rzecz prosta, ale nijak nie chce mi liczyć tego co ma:(
Zawsze wyniki mi się multiplikują.
osiris
Sprobuj:
  1. SELECT p.Imie, SUM(p.kwota), SUM(w.kwota)
  2. FROM planowane AS p LEFT JOIN wykonane w ON p.Imie = w.Imie
  3. GROUP BY p.Imie


Pozdrawiam
ketiv
Dzięki za odpowiedz, ale własnie w tym jest problem.
Ponieważ to zapytanie zwraca wynik natępujący:

Imie SUM(bp.kwota) SUM(bw.kwota)
Asia 25000 NULL - tu wszystko OK
Tomek 25000 26000 - tu juz 2 kolumna zdublowana
Witek 60000 30000 - tu wszystko rozjechane:(

Próbowałem już z różnymi połączeniami, lecz za każdym razem wynik odbiega od ideału.
JoShiMa
  1. SELECT p.Imie, SUM(p.kwota), SUM(w.kwota)
  2. FROM planowane p LEFT OUTER JOIN wykonane w ON p.Imie = w.Imie AND p.miesiąc=w.miesiąc
  3. GROUP BY p.Imie


OUTER bo w drugiej tabeli może nie być osoby, która jest w pierwszej no i musisz łączyć tabele po imieniu i miesiącu (jak sądzę), bo inaczej Dwóch witków z pierwszej połączy się z trzema Witkami z drugiej dając 6 rekordów, które po zsumowaniu dadzą kiszkę.
osiris
JoShiMa:
LEFT JOIN = LEFT OUTER JOIN

ketiv:
jesli zapytanie JoShiMa nie zadziala to sprobuj tego:
  1. SELECT p.Imie, SUM(p.Kwota), w.Suma
  2. FROM planowane AS p LEFT JOIN (SELECT Imie , SUM(Kwota) AS Suma FROM wykonane GROUP BY Imie) AS w ON p.Imie = w.Imie
  3. GROUP BY p.Imie

lub tego:
  1. SELECT p.Imie, p.Suma, w.Suma
  2. FROM (SELECT Imie, Sum(Kwota) AS Suma FROM planowane GROUP BY Imie) AS p
  3. LEFT JOIN (SELECT Imie , SUM(Kwota) AS Suma FROM wykonane GROUP BY Imie) AS w ON p.Imie = w.Imie
ketiv
Dzięki @osiris
to drugie rozwiązanie działa rewelacyjnie yahoo.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.