Kwerenda ms access źle sumuje kolumny, proszę o pomoc.

0

Witam mam następujący program z bazą ms access:

  1. Utworzyłem sobie prostą bazę do rozliczania zaliczek w firmie:
    Relacja.png
  2. Następnie utworzyłem kwerendę podsumowującą z trzech tabel, pobierając imię, nazwisko z tabeli pracownicy, wartość_zaliczki z tabeli zaliczki, wartość_faktury z tabeli faktury.
    kwe1.png kwer_pods.png kwer_proj.png
  3. Kwerenda źle sumuje kolumny wartość_zaliczki i wartość_faktury, tak jakby podwójnie
    obliczenia_kwer.png
  4. Podejrzewam że tworzy się iloczyn kartezjański, ale za nic (już chyba ze 2 dni próbuje) nie mogę sobie z tym poradzić.
  5. Proszę o pomoc w tym temacie
0

Wrzuć na sqlfiddle dane + sql kwerendy (nie obrazki), to coś się poradzi...

0

Nie rozumiem o co w tym chodzi.

0

kod sql z accessa to:

SELECT DISTINCTROW pracownik.imię, pracownik.nazwisko, Sum(zaliczka.wartosc_zaliczki) AS [Suma Of wartosc_zaliczki], Sum(faktura.wartosc_faktury) AS [Suma Of wartosc_faktury]
FROM (pracownik INNER JOIN zaliczka ON pracownik.[id_pracownika] = zaliczka.[id_zaliczki]) INNER JOIN faktura ON pracownik.[id_pracownika] = faktura.[id_faktury]
GROUP BY pracownik.imię, pracownik.nazwisko;
0

Masz dziwną strukturę bazy. Jeżeli łączysz zaliczki i faktury z pracownikiem to w obu tych tabelach powinno być pole ID_pracownika dające relację do tabeli pracowników. Ponieważ faktury są powiązane z konkretnymi zaliczkami powinna byc jeszcze jedna tabela pozwalająca wykazać tą relację. Wg mnie musisz zacząć od przeprojektowania bazy

0
cw1 napisał(a):

Masz dziwną strukturę bazy. Jeżeli łączysz zaliczki i faktury z pracownikiem to w obu tych tabelach powinno być pole ID_pracownika dające relację do tabeli pracowników. Ponieważ faktury są powiązane z konkretnymi zaliczkami powinna byc jeszcze jedna tabela pozwalająca wykazać tą relację. Wg mnie musisz zacząć od przeprojektowania bazy

Dzieki za odpowiedz, ale chodziło mi raczej o to żeby właśnie faktury niebyły powiązane z zaliczkami. Baza miała działać tak że na koniec miesiąca patrzę sumę zaliczek pobranych przez danego pracownika i sumę faktur/rachunków przez niego oddanych i wyliczam różnicę (zaliczki - faktury) wtedy wiem ile pieniędzy musi zwrócić.

0

W takiej sytuacji moim zdaniem lepiej wrzucić zaliczki i faktury do jednej tabeli dodając tylko pole w którym będzie informacja czy to zaliczka czy faktura

0

Może tak:

SELECT
	imię
	,nazwisko
	,SUM(wz) AS ZALICZKI
	,sum(WF) AS FAKTURY
FROM (
	SELECT 
		pracownik.imię
		, pracownik.nazwisko
		,SUM(zaliczka.wartosc_zaliczki) AS WZ
		,0 aS WF
	FROM 
		pracownik 
		INNER JOIN zaliczka ON pracownik.[id_pracownika] = zaliczka.[id_zaliczki]
	GROUP BY 
		pracownik.imię
		, pracownik.nazwisko
	union all
	SELECT 
		pracownik.imię
		, pracownik.nazwisko
		,0 as WZ
		,SUM(faktura.wartosc_faktury) AS WF
	FROM 
		pracownik 
		INNER JOIN faktura ON pracownik.[id_pracownika] = faktura.[id_faktury]
	GROUP BY 
		pracownik.imię
		, pracownik.nazwisko) AS DT
GROUP BY
	imię
	,nazwisko

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