Obliczenia z kilku tabel w kwerendzie

Użytkowanie programu bazodanowego

Obliczenia z kilku tabel w kwerendzie

Postprzez lepik » Wt lut 16, 2010 12:06 am

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
lepik
 
Posty: 5
Dołączył(a): Pn cze 29, 2009 9:21 pm

Re: Obliczenia z kilku tabel w kwerendzie

Postprzez jkwin » Wt lut 16, 2010 4:40 pm

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"
jkwin
 
Posty: 28
Dołączył(a): Pt cze 12, 2009 5:57 pm

Re: Obliczenia z kilku tabel w kwerendzie

Postprzez lepik » Wt lut 16, 2010 9:04 pm

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.
Załączniki
stan.odb
(7.65 KiB) Pobrane 171 razy
lepik
 
Posty: 5
Dołączył(a): Pn cze 29, 2009 9:21 pm

Re: Obliczenia z kilku tabel w kwerendzie

Postprzez mg2 » Śr lut 17, 2010 3:50 am

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   Rozszerz widokZwiń widok
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   Rozszerz widokZwiń widok
SELECT "towar" AS "t_s",
SUM( "ilosc_s" ) AS "ilosc_s_sum"
FROM "sprzedaz"
GROUP BY "towar"


Stan magazynu:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
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 ...".
Załączniki
stan_magazynu.odb
(6.89 KiB) Pobrane 221 razy
OOo3.1.1 na Ubuntu 9.04
mg2
 
Posty: 170
Dołączył(a): Cz sty 28, 2010 9:20 pm


Powrót do Base

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości