Zapytanie - JOIN na dwóch tabelach

0

Witam, mam dwie tabele SPRZEDAZ i ZWROTY. Kazda z nich posiada kolumnę DATA i DZIAŁ.
Chciałbym otrzymać wynik pokazujący Sume sprzedazy i sume zwrotów w danym dniu.
Skonstruowałem zapytanie ale wyniki są dziwne. Co jest w nim źle? Jak skonstruować poprawne?

SELECT zwroty.dzial,SUM(sprzedaz.obroty),SUM(zwroty.koszt)
FROM sprzedaz
LEFT JOIN zwroty ON zwroty.dzial=sprzedaz.dzial
WHERE zwroty.data='2014-09-20' AND sprzedaz.data='2014-09-20' GROUP BY zwroty.dzial

1
WITH cte AS(
SELECT
  s.dzial
 ,s.obroty
 ,ISNULL(z.koszty,0) koszty
 ,s.DATA S_DATA
 ,z.DATA Z_DATA
FROM
  sprzedaz S
  LEFT JOIN zwroty Z ON Z.dzial = s.dzial AND S.DATA=Z.DATA
)
SELECT
	DZIAL,
	S_DATA,
	SUM(OBROTY) TTL_OBROTY,
	SUM(KOSZTY) TTL_KOSZTY,
FROM
	CTE
GROUP BY
       DZIAL,
       S_DATA
 

Strzelam, ze null`e ze zwrotów psuły Ci wyniki.

1

Zarówno @Qguaru, jak również @Ldr trochę źle zakładacie, że w danym dniu będą zarówno zwroty i sprzedaże. Należałoby wg mnie wyodrębnić daty, gdy występowały zwroty lub sprzedaże i dopiero łączyć, czyli utworzyć tabelę tymczasową z datami, a następnie łączyć tę tabelę poprzez left outer join oraz wykorzystując ifnull.
Innym rozwiązaniem mogłoby być skorzystanie z procedur DML, czy jak się to tam nazywa :)

0

Sprzedaże i zwroty są każdego dnia, więc z tym nie problem.
z null-ami też nie mam problemu. Teraz po prostu dla każdej sprzedaży sumuje mi wszystkie zwroty i dla każdej sprzedaży wszystkie zwroty..

1

To trza było tak od razu...

SELECT obroty.dzial, obroty.obroty-zwroty.zwroty FROM (SELECT dzial, data, Sum(zwroty) zwroty FROM zwroty GROUP BY dzial, data) zwroty JOIN (SELECT dzial, data, Sum(obroty) obroty FROM obroty GROUP BY dial, data) obroty ON obroty.dzial=zwroty.dzial AND obroty.data=zwroty.data
0

Dzięki Marcin :) o to właśnie chodziło

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.