Strona 1 z 1

Obliczenia z kilku tabel w kwerendzie

: wt lut 16, 2010 12:06 am
autor: lepik
Witam
W bazie są 3 tabele: towary, zakupy i sprzedaz. Są one połączone (jest relacja kluczami) polem towar. Chodzi o wykonanie kwerendy, która by pokazywała aktualny stan towarów (różnicę między zakupem a sprzedażą). Dane do tabel Zakupy i Sprzedaz są wprowadzane przy pomocy oddzielnych formularzy.
Schemat tabel (---------- --> relacja między tabelami)

Zakupy Towary Sprzedaz
ID_z (klucz) ID_s(klucz)
towar----------towar(klucz)--------towar
ilosc_z ilosc_s
data_z data_s

Przepraszam, że schemat nie wygląda zbyt czytelnie jasno

Re: Obliczenia z kilku tabel w kwerendzie

: wt lut 16, 2010 4:40 pm
autor: jkwin
Spróbuj:
SELECT "TOWARY"."TOWAR", "ILOSC_Z" - "ILOSC_S" AS "STAN" FROM "SPRZEDAZ", "TOWARY", "ZAKUPY" WHERE "SPRZEDAZ"."ID_T" = "TOWARY"."ID_T" AND "ZAKUPY"."ID_T" = "TOWARY"."ID_T"

Re: Obliczenia z kilku tabel w kwerendzie

: wt lut 16, 2010 9:04 pm
autor: lepik
Spróbuj:
SELECT "TOWARY"."TOWAR", "ILOSC_Z" - "ILOSC_S" AS "STAN" FROM "SPRZEDAZ", "TOWARY", "ZAKUPY" WHERE "SPRZEDAZ"."ID_T" = "TOWARY"."ID_T" AND "ZAKUPY"."ID_T" = "TOWARY"."ID_T"
Też wydawało mi się to takie proste, ale przy takim zapisie źle liczy. Proszę spojrzeć do załączonego pliku.

Re: Obliczenia z kilku tabel w kwerendzie

: śr lut 17, 2010 3:50 am
autor: mg2
Też wydawało mi się to takie proste, ale przy takim zapisie źle liczy.
Źle liczy bo nie sortuje towaru.

(+ zał.)

Kwerenda sum zakupów:

Kod: Zaznacz cały

SELECT "towar" AS "t_z",
SUM( "ilosc_z" ) AS "ilosc_z_sum"
FROM "zakupy"
GROUP BY "towar"
Kwerenda sum sprzedaży:

Kod: Zaznacz cały

SELECT "towar" AS "t_s",
SUM( "ilosc_s" ) AS "ilosc_s_sum"
FROM "sprzedaz"
GROUP BY "towar"
Stan magazynu:

Kod: Zaznacz cały

SELECT "kw_zakupy_sum"."t_z",
"kw_zakupy_sum"."ilosc_z_sum" AS "il_z_sum",
ifnull( "kw_sprzedaz_sum"."ilosc_s_sum", 0 ) AS "il_s_sum",
"kw_zakupy_sum"."ilosc_z_sum" - ifnull( "kw_sprzedaz_sum"."ilosc_s_sum", 0 ) AS "stan"
FROM "kw_zakupy_sum" LEFT OUTER JOIN "kw_sprzedaz_sum"
ON "kw_zakupy_sum"."t_z" = "kw_sprzedaz_sum"."t_s"
UWAGI TECHNICZNE
Baza dopuszcza możliwość sprzedaży towaru, który nie został zakupiony !
Towar "atrament" jest w tabeli "towary" i w tabeli "sprzedaz" ale nie ma go w tabeli "zakupy".
Bezpieczniej jest zrobić bazę bez takiego założenia tak, żeby w tabeli "stan magazynu" pokazywały się wartości ujemne.
Można to zrobić przez "FULL JOIN" zamiast "LEFT JOIN". Problem w tym, że OOo (v. 3.2.0) nie obsługuje tego polecenia. W przypadku dwóch tabel można je w miarę sensownie zastąpić przez "[LEFT JOIN] UNION [RIGHT JOIN]". Jednak "UNION" trzeba wpisać jako polecenie SQL (nie kwerendę) co wymusza użycie "CREATE VIEW" (również jako polecenie SQL). Dopiero z tak powstałego widoku (niewidocznego w interfejsie bazy do ponownego otwarcia pliku) można utworzyć kwerendę.

PS

Odpowiednikiem polecenia "CREATE VIEW" jest przycisk "Utwórz widok ..." w dziale tabel. Tak utworzony widok jest widoczny od razu (nie trzeba ponownie otwierać pliku). Widok można modyfikować jako polecenie poprzez "Edytuj w widoku SQL ...".