Forum Użytkownikow Subiekt GT
InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: nxt w Maj 10, 2018, 13:38:45
-
Potrzebuję wygenerować zestawienie ilościowe sprzedaży towarów (pa,fs) i zamówień z konkretnej grupy towarowej (niezrealizowane), oraz stanu towaru z okresu np dwóch tygodni. Dałem z tym radę tyle że rozbijam się o to że na liście muszę mieć też towary które się nie sprzedawały / nie zostały zamówione, czyli lista musi także zawierać te na których obrót był 0. Jakieś pomysły, podpowiedzi?
-
Nie wiem czy rozumiem w czym problem - wyciągasz tylko towary występujące na fakturach i paragonach w danym okresie? Jeżeli tak, to po prostu wyciągnij wszystkie towary z grupy i ich sprzedaży. Może używasz inner join zamiast left join i dlatego ucina Ci część towarów.
-
Coś takiego wygenerowałem,
SELECT
tw__Towar.tw_Symbol
,tw__Towar.tw_Nazwa
,SUM(dok_Pozycja.ob_Ilosc) AS tw_sprzedaz
FROM dbo.dok_Pozycja
LEFT OUTER JOIN dbo.tw__Towar
ON dok_Pozycja.ob_TowId = tw__Towar.tw_Id
LEFT OUTER JOIN dbo.dok__Dokument
ON dok_Pozycja.ob_DokHanId = dok__Dokument.dok_Id
WHERE dok__Dokument.dok_Typ IN (2, 21)
AND tw__Towar.tw_IdGrupa = 21
AND dok__Dokument.dok_DataWyst BETWEEN '2018-04-01' AND '2018-04-30'
GROUP BY tw__Towar.tw_Symbol
,tw__Towar.tw_Nazwa
i to pokazuje tylko towary o sprzedaży > niż 0 czyli 1546 pozycji z 1800, a ja chcę całą listę towarów z tej grupy czyli 1800
-
A co niby ma pokazać?
Wybierasz jako podstawową tabelę dok_pozycja, która już ma tylko towary, które są na dokumentach i łączysz ją lewostronnie z tabelą towarów (czyli wszystkie z dok_pozycja i te tw__towar, które są z dok_pozycja).
Wyświetl najpierw tabelę towarów i podczep do niej lewostronnie tabelę ze sprzedażą i będziesz miał to chcesz.
-
Uzupełniając wypowiedź Sławka to ten fragment
SELECT
(...)
FROM dbo.dok_Pozycja
LEFT OUTER JOIN dbo.tw__Towar
ON dok_Pozycja.ob_TowId = tw__Towar.tw_Id
Oznacza w uproszczonym tłumaczeniu:
pokaż wszystkie pozycje dokumentów, nawet te które nie są powiązane z żadnymi towarami/usługami z kartoteki.
a wg opisu miało być:
pokaż wszystkie towary z kartoteki, nawet te które nie są powiązane z żadnymi pozycjami dokumentów
Czyli
FROM tw_Towar
LEFT JOIN dok_Pozycja
-
SELECT
tw__Towar.tw_Nazwa AS sp_nazwa
,tw__Towar.tw_Symbol AS sp_iosc
,SUM(dok_Pozycja.ob_Ilosc) AS tw_sprzedaz
FROM dbo.tw__Towar
LEFT JOIN dbo.dok_Pozycja
ON tw__Towar.tw_Id = dok_Pozycja.ob_TowId
LEFT JOIN dbo.dok__Dokument
ON dok_Pozycja.ob_DokHanId = dok__Dokument.dok_Id
WHERE tw_IdGrupa IN (21) AND tw_Zablokowany = 0 AND dok_DataWyst BETWEEN '2018-01-01' AND '2018-05-01'
GROUP BY tw_Symbol,tw_Nazwa
ok. poszedłem po left join od tabeli tw__towar ... dalej efekt bez zerowych wartości :(
-
Przecież masz warunki, które ograniczają zbiór wynikowy niezależnie od sposobu połączenia.
Co będzie np w polu dok_datawyst przy takim połączeniu jakie masz w swoim zestawieniu dla towarów, które nie były sprzedawawne w wybranym okresie?
-
Przepraszam. Pytam o podpowiedź. Jak bym wiedział co mam zrobić to bym szanownym forumowiczom nie zawracał pewnej części ciała.
Wiem że znajdzie się mądry który podpowie co i jak mam zrobić co by zamierzony efekt osiągnąć.
Założenie takie:
1. Wszystkie towary z grupy o statusie niezablokowane
2. Ich sprzedaż sumaryczne za ostatnie np 14 dni, włącznie z tymi które się w tym czasie nie sprzedały.
3. Wujka na G też już pytałem, ale albo mam jeszcze za małą wiedzę albo nie potrafię pewnej zależności zrozumieć. Wiem że sum i group ograniczają wyniki a tego chcę uniknąć więc pytam
Pozdrawiam,
Adam
-
Ale ja Ci właśnie podpowiadam.
Jakbym Ci napisał to zapytanie to nie byłaby podpowiedź.
Napisałem Ci wcześniej:
Wyświetl najpierw tabelę towarów i podczep do niej lewostronnie tabelę ze sprzedażą i będziesz miał to chcesz.
Podpowiadam jeszcze bardziej - "tabela" ze sprzedażą to podzapytanie które już wyliczasz.
Bez podzapytania też się da zrobić ale trzeba określić warunki tak, aby nie filtrowało towarów bez sprzedaży.
-
tym tokiem myślenia poszedłem ... działa ;) thx