Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SQL zapytanie sumujące z 2 tabel
ketiv
post 25.06.2008, 13:05:19
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.08.2005

Ostrzeżenie: (0%)
-----


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ą.
Go to the top of the page
+Quote Post
osiris
post 25.06.2008, 23:53:51
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ketiv
post 26.06.2008, 10:31:04
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.08.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
JoShiMa
post 26.06.2008, 13:05:44
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


  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ę.

Ten post edytował JoShiMa 26.06.2008, 13:10:13


--------------------
Go to the top of the page
+Quote Post
osiris
post 26.06.2008, 18:58:57
Post #5





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ketiv
post 26.06.2008, 22:34:39
Post #6





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.08.2005

Ostrzeżenie: (0%)
-----


Dzięki @osiris
to drugie rozwiązanie działa rewelacyjnie yahoo.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 06:23