1

Temat: Problem z zapytaniem

Witam
Jestem nowy na forum wiec proszę o wyrozumiałosć:)
Mam 3 tabele: tabela z pracownikami, z transakcjami i ze szczegółami transakcji.
Muszę wybrać sprzedane towary które mają w nazwie określony ciąg znaków i te towary zostały sprzedane w jednej transakcji z innymi towarami.
Muszę także wybrać sprzedane towary które mają w nazwie określony ciąg znaków - z tym sobie poradziłem:)

Pozdrawiam
A. Bukalski

2

Odp: Problem z zapytaniem

Gdzie trzymasz informacje o relacji transakcji z produktami?
Czy dane o towarach trzymasz w tabeli transakcje ?

Pozdrawiam
Pawel Socha

3

Odp: Problem z zapytaniem

w tabeli ze szczegółami transakcji mam kolumne z nazwą produktu, wiec nie mam potrzeby zagłębiać sie do tabeli z produktami.

z grubsza podaje strukturę tabel
Tabela pracownicy
id_pracownika||imie|nazwisko|....

transakcje
id_transakcji|id_pracownika|data_sprzedazy|

transakcje_szczegoly
id|id_transakcji|nazwa_produktu|ilosc|id_pracownika

4

Odp: Problem z zapytaniem

Pozdrawiam
Pawel Socha

5

Odp: Problem z zapytaniem

Nie wiem jaka to wersja pg.
Pracuje na pgAdminie 2 dzień wiec nie wiem gdzie to sprawdzić.

mam towar np mleko w kartonie
Musze wybrać ilość sprzedancyh kartonów mleka na podstawie dokumentów sprzedaży w tym przypadku ZO dla określonej liczby sprzedawców (np id_pracownika 1, 4, 8, 15)
oraz ilość sprzedanych kartonów mleka sprzedanych razem np z masłem, bułką itd. (sprzedaż wiązana)

Z pierwszą częścią sobie poradziłem

SELECT sum(te.ilosc), p.login, p.nazwisko, p.imie  
FROM pracownicy p
JOIN transakcje t ON p.idpracownika = t.idpracownika
JOIN transelem te ON t.idtrans = te.idtrans
WHERE p.idpracownika =  1 
AND te.nazwa like '%mleko%'
AND t.datawystaw BETWEEN '2009-11-30' AND '2009-12-05'
AND (t.rodzaj=30)
group by p.login, p.nazwisko, p.imie

i teraz nie wiem w jaki sposób wyciągnąć ilość kartonów mleka gdy zostały sprzedane np z bułką.
Czyli chce odrzucić wszystkie rekordy które w tabeli transelem mają tyko to mleko

6

Odp: Problem z zapytaniem

1. Szukasz transakcje z butelka
2. dla znalezionych transakcji szukasz mleka

SELECT id_pracownika, nazwa, sum(ilosc)  OVER(PARTITION BY nazwa)  FROM transelem t WHERE EXISTS (select 1 FROM transelem t2 WHERE t.idtrans=t2.idtrans and nazwa='butelka');

może to coś ci pomoże ;]

Pozdrawiam
Pawel Socha

7

Odp: Problem z zapytaniem

dzięki wielkie
Twoja podpowiedz naprowadziła mnie do rozwiązania które dało oczekiwane wyniki.

Pozdrawaim
buczer