Forum Użytkownikow Subiekt GT

InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: Paweł Em w Kwiecień 13, 2021, 16:31:21

Tytuł: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 13, 2021, 16:31:21
Hej wszystkim

Mam problem ponieważ nie potrafię znaleźć tabeli w sql która odpowiada w subiekcie za wielkość sprzedaży(coś jak zestawienie "sprzedaż wg asortymentu"W zapytaniu do którego chcę dodać taką tabelę , mam już stan magazynowy,  a zamysł jest taki żęby w excelu porównać których towarów jest mniej na stanie niż sprzedało się w ciągu ostatniego miesiąca i w łatwy sposób zlecić je do produkcji...  :)
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: birds22 w Kwiecień 13, 2021, 17:16:17
Najlepiej wykorzystać widok vwZstSprzedWgKhnt
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 13, 2021, 18:36:59
Wybacz nie potrafię zastosować Twojego rozwiązania.

Generalnie stworzyłem swój własny program do zlecania na produkcję, z subiekta pobieram tylko dane. Jedyne co chciałbym dodać to właśnie kolumnę która pokaże mi ile której pozycji się sprzedaje, a w excelu zrobię sobie formatowanie warunkowe i będzie mi pokazywać te pozycje których pozycji jest mniej na stanie niż mogłoby być co wyniknie z różnicy pomiędzy stanem a sprzedażą. Birds22 wybacz moją mała wiedzę, jednak staram się jak mogę żeby uprościć swoją pracę

SELECT Towar.tw_IdGrupa , Towar.tw_Symbol, Towar.tw_Nazwa, Stan.st_Stan
FROM tw__Towar TOWAR
 inner join tw_Stan as STAN ON tw_Id = st_TowId
WHERE tw_Zablokowany = 0 AND st_MagId = 1 AND tw_Rodzaj = 8 AND tw_IdGrupa IN(1,4)AND tw_Nazwa NOT LIKE 'ści%'
 AND tw_Nazwa NOT LIKE 'wyk%' ORDER by tw_Symbol
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Szczygiel w Kwiecień 13, 2021, 22:31:55
Zawsze możesz skorzystać z profilera i podsłuchać wbudowane zapytanie - zmienić ich strukturę i uzyskać oczekiwany rezultat.
Tytuł: sql dodanie tabeli
Wiadomość wysłana przez: candy w Kwiecień 13, 2021, 22:41:02
Tabelę będziesz musiał aktualizować, a widok daje zawsze aktualne dane.
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 17, 2021, 16:05:42
Informacja dla mnie potrzebna znajduje się w tabeli dok_Pozycja w ob_ilosc?
Nie znam się na tym co próbuje zrobić lecz wiem że mi to ułatwi pracę....
 Ma ktoś jakiś pomysł? PS nie czekam na gotowe rozwiązanie sam próbuję ale póki co bez sukcesu.
Pozdrawiam
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 17, 2021, 16:44:01
Udało mi się zrobić to zapytanie w inny sposób, lecz teraz nie umiem połączyć tych dwóch zapytań z racji słabej wiedzy. Jest może ktoś kto mógłby mi pomóc? Chodzi o to że wynik ponższego zapytania chciałbym mieć w zapytaniu powyżej


SELECT     tw__Towar.tw_Symbol AS SYMBOL, SUM(dok_Pozycja.ob_Ilosc) as sprzedaZ
                 


FROM         dok__Dokument

                  INNER JOIN dok_Pozycja ON dok_Pozycja.ob_DokHanId = dok__Dokument.dok_Id
                  INNER JOIN tw__Towar ON dok_Pozycja.ob_TowId = tw__Towar.tw_Id
                  INNER JOIN tw_Stan ON tw__Towar.tw_Id = tw_Stan.st_TowId
           

WHERE  tw_Zablokowany = 0 and   dok__Dokument.dok_Typ = 2 and tw_Rodzaj = 8 and st_magid = 1 AND tw_IdGrupa IN(1,4)AND tw_Nazwa NOT LIKE 'ści%' AND tw_Nazwa NOT LIKE 'wyk%'
 
 
GROUP BY tw_Symbol, tw_JednMiary
ORDER BY tw_Symbol
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 17, 2021, 17:46:09
Panowie tak mnie zmotywowało wstawianie tu na grupę, że sam sobie poradziłem. Została ostatnia rzecz (zapewne prosta)a mianowicie co mam zrobić żeby w kolumnie SUM(dok_Pozycja.ob_Ilosc) brał pod uwagę tylko ostatnie 30 dni?

SELECT tw_IdGrupa, tw_Symbol,tw_Nazwa,st_Stan, tw_JednMiary, SUM(dok_Pozycja.ob_Ilosc)as sprzedaż, ob_Jm, tc_CenaNetto7, tc_CenaBrutto7,TowarSkladnikiKompletu = (
  STUFF (
   (
     SELECT
      '|' + (SELECT tw_Symbol FROM tw__Towar WHERE tw_Id = KPL.kpl_IdSkladnik) + 'x' + CAST(KPL.kpl_Liczba AS VARCHAR(MAX))
     FROM
      tw_Komplet KPL
      JOIN tw__Towar on kpl_IdKomplet = tw_Id
     WHERE
      tw_Id = tw_Id FOR XML PATH ('')
   ),
   1,
   1,
   ''
  )
)


FROM         dok__Dokument
               
                  INNER JOIN dok_Pozycja ON ob_DokHanId = dok_Id
                  INNER JOIN tw__Towar ON ob_TowId = tw_Id
              INNER JOIN tw_Cena CENA ON tw_Id = tc_Id
                  INNER JOIN tw_Stan ON tw_Id = st_TowId
               

WHERE  tw_Zablokowany = 0 AND st_MagId = 1 AND tw_Rodzaj = 8 AND tw_IdGrupa IN(1,4) AND tw_Nazwa NOT LIKE 'ści%' AND tw_Nazwa NOT LIKE 'wyk%'
 
 
 GROUP BY tw_IdGrupa, tw_Symbol,tw_Nazwa,st_Stan, tw_JednMiary, ob_Jm, tc_CenaNetto7,tc_CenaBrutto7
ORDER BY tw_Symbol
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 23, 2021, 11:37:23
Uprościłem całe zapytanie ponieważ zmieniłem trochę koncepcję. W całym zapytaniu chcę osiągnąć wyświetlenie wszystkich rekordów(grupa,symbol,nazwa,bieżący stan magazynowy oraz ilość sprzedana w ostatnich 30 dniach).
Teraz tak właśnie jest z jednym wyjątkiem, mianowicie pokazuje mi tylko rekordy dla których w ostatnich 30dniach była jakakolwiek sprzedaż, a ja chciałbym widzieć także te dla których nie było żadnej. Czy jest to w ogóle możliwe?
Czy mogę liczyć na pomoc któregoś z forumowiczów? P.s nie idę na łatwiznę bo jak widać  sam bez pomocy dokonałem postępu. Bardzo proszę o pomoc :)

SELECT    tw_IdGrupa, tw_Symbol,tw_Nazwa,st_Stan, SUM(dok_Pozycja.ob_Ilosc)as sprzedaż_miesieczna, ob_Jm
 
FROM dok__Dokument
               INNER JOIN dok_Pozycja ON ob_DokHanId = dok_Id
                  INNER JOIN tw__Towar ON ob_TowId = tw_Id
                   INNER JOIN tw_Stan ON tw_Id = st_TowId
               
WHERE dok_DataWyst <= getdate() and dok_DataWyst >= dateadd(day,-30,getdate()) AND dok__Dokument.dok_Typ = 2 AND  tw_Zablokowany = 0 AND st_MagId = 1 AND tw_Rodzaj = 8 AND tw_IdGrupa IN(1,4) AND tw_Nazwa NOT LIKE 'ści%' AND tw_Nazwa NOT LIKE 'wyk%'

 
GROUP BY   tw_IdGrupa, tw_Symbol,tw_Nazwa,st_Stan, ob_Jm
ORDER BY  tw_Symbol
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: tomaszf w Kwiecień 23, 2021, 12:57:59
Musisz wyjść od tw__towar.

Najprościej (niekoniecznie najwydajniej):
Zrób sobie
SELEC tw.tw_nazwa, sp.sprzedaż_miesieczna
FROM tw__towar tw
LEFT JOIN
(
tu zapytanie które przygotowałeś wcześniej, ale został tylko dok__Dokument i dok_pozycja, JOINY do tw__towar i tw_stan usuń (co za tym idzie z WHERE usuń warunki z tych tabel), a w SELECT zostaw tylko id towaru i sprzedaż
) sp
[ tutaj te dodatkowe JOINY i warunki]

Jak zagmatwałem to pytaj :).

Swoją drogą: skorzystanie z widoku o którym wspominał birds22 jest lepszym pomysłem niż korzystanie z tego zapytania które stworzyłeś, ponieważ jeżeli korzystasz z faktur zbiorczych wyniki mogą być błędne.
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 27, 2021, 20:03:13
Niestety, nie posługuję się SQL-em ,staram się tylko ułatwić swoją pracę, utknąłem w miejscu. Nie wiem co mam zrobić, żeby osiągnąć końcowy rezultat...
Generalnie potrzebuję wszystkie te kolumny z selecta do dalszej pracy naa nich w excelu... Poniższe zapytanie oparte na pomocy tomaszf funkcjonuje źle, pokazuje tylko 417 rekordów z 6300. Ma ktoś jakąś wskazówkę?


Select  tw_IdGrupa,tw_Symbol,tw_Nazwa,st_Stan,SUM(dok_Pozycja.ob_Ilosc)as sprzedaż_miesieczna, ob_Jm

From tw__Towar 
   
   LEFT JOIN dok__Dokument ON tw_Id = dok_id
   LEFT JOIN dok_Pozycja  ON dok_Id = ob_TowId
    JOIN tw_Stan ON tw_Id = st_TowId
   
   
   
WHERE dok_DataWyst <= getdate() and dok_DataWyst >= dateadd(day,-30,getdate()) AND dok__Dokument.dok_Typ = 2 AND  tw_Zablokowany = 0 AND st_MagId = 1 AND tw_Rodzaj = 8 AND tw_IdGrupa IN(1,4) AND tw_Nazwa NOT LIKE 'ści%' AND tw_Nazwa NOT LIKE 'wyk%'
 
GROUP BY    tw_IdGrupa, tw_Symbol,tw_Nazwa,st_Stan , ob_Jm
ORDER BY  tw_Symbol
Tytuł: sql dodanie tabeli
Wiadomość wysłana przez: candy w Kwiecień 27, 2021, 20:22:01
Nie znasz SQL to zamów, zyskasz od cholery czasu. Ale oczywiście jak chcesz.

Nie będę analizował całości ale ten kawałek
Cytuj
From tw__Towar 

LEFT JOIN dok__Dokument ON tw_Id = dok_id
   LEFT JOIN dok_Pozycja  ON dok_Id = ob_TowId
to jest jakaś masakra totalnie bez zrozumienia.
Powinno być:
Cytuj
From tw__Towar 
LEFT JOIN dok_Pozycja  ON tw_Id = ob_TowId
LEFT JOIN dok__Dokument ON ob_dokHanId = dok_id
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 27, 2021, 20:45:30
CANDY MASZ RACJĘ NA DRUGI RAZ ZLECĘ KOMUŚ I ZAOSZCZĘDZE CZAS..... Jednak teraz już tyle nad tym spędziłem, że muszę to dokończyć.Poprawiłem połączenia wedle Twojej sugestii. Wszystko działa dobrze poza jednym małym szczegółem, mianowicie zapytanie teraz pokazuje tylko rekordy  dla których była sprzedaż w ciągu ostatnich 30dni a ja chciałbym żeby pokazywało wszystkie rekordy. Ma ktoś jakiś pomysł?

SELECT
TOWAR.tw_IdGrupa,TOWAR.tw_Symbol,TOWAR.tw_Nazwa,STAN.st_Stan,SUM(dok_Pozycja.ob_Ilosc)as sprzedaż_miesieczna,tw_JednMiary


FROM tw__Towar TOWAR

inner join tw_Stan as STAN ON tw_Id = st_TowId 
LEFT JOIN dok_Pozycja  ON tw_Id = ob_TowId
LEFT JOIN dok__Dokument ON ob_dokHanId = dok_id


WHERE dok_DataWyst <= getdate() and dok_DataWyst >= dateadd(day,-30,getdate()) AND  tw_Zablokowany = 0 AND st_MagId = 1 AND tw_Rodzaj = 8 AND tw_IdGrupa IN(1,4) AND tw_Nazwa NOT LIKE 'ści%' AND tw_Nazwa NOT LIKE 'wyk%'

GROUP BY    tw_IdGrupa, tw_Symbol,tw_Nazwa,st_Stan ,tw_JednMiary
ORDER by tw_Symbol
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: candy w Kwiecień 27, 2021, 21:09:46
CANDY MASZ RACJĘ NA DRUGI RAZ ZLECĘ KOMUŚ I ZAOSZCZĘDZE CZAS.....
Stanowczo zleć, bo działasz zupełnie po omacku  ;)

Tu masz warunek na daty (napisany tyłem do przodu, ale działa)
WHERE dok_DataWyst <= getdate() and dok_DataWyst >= dateadd(day,-30,getdate()) AND tw_Zablokowany...bardziej zrozumiała forma byłaby moim zdaniem taka
WHERE
 dok_DataWyst >= dateadd(day,-30,getdate()) AND dok_DataWyst <= getdate()
 AND tw_Zablokowany...
Pierwszy warunek mówi że data ma być nie wcześniejsza niz 30 dni wstecz, a drugi że nie późniejsza niż dziś.
Jak dasz
WHERE
 dok_DataWyst <= getdate()
 AND tw_Zablokowany
To będą wszystkie (poza przyszłymi) a jeśli przyszłe nie stanowią problemu to wywal wszystko między WHERE i tw_Zablokowany
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 27, 2021, 21:26:50
CANDY, oczywiście masz rację jednak potrzebuję żeby były wszystkie z ostatnich 30dni :) Proszę pomóż mi zakończyć moje wypociny z tym zapytaniem, a na przyszłość zlecę i zapłacę z uciechą zaoszczędzenia czasu. Na pewno nauczyło mnie to zapytanie pokory.
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: candy w Kwiecień 28, 2021, 00:21:36
CANDY, oczywiście masz rację jednak potrzebuję żeby były wszystkie z ostatnich 30dni :) Proszę pomóż mi zakończyć moje wypociny z tym zapytaniem, a na przyszłość zlecę i zapłacę z uciechą zaoszczędzenia czasu. Na pewno nauczyło mnie to zapytanie pokory.
To zapytanie w ogóle sprawdzi się tylko w szczególnych przypadkach, bo nie będzie poprawnie liczyło sprzedaży z faktur zbiorczych, ani zaliczkowych, nie będzie pomijało faktur detalicznych ani unieważnionych.
Sprawdzi się dobrze tylko na zwykłych fakturach.
Na dodatek warunek dla daty jest niedobry, bo GETDATE() daje wynik z minutami a GT nie zapisuje czasu, więc na krawedziach przedziału będą błędy.

Biorąc to wszystko pod uwagę poprawione SELECT wygląda tak (świadomie wybrałeś tylko komplety, prawda?)
SELECT T.tw_IdGrupa, T.tw_Symbol, T.tw_Nazwa, ST.st_Stan, Sprzedaz_miesieczna = ISNULL(SP.Sprzedaz, 0)
FROM tw__Towar T
INNER JOIN tw_Stan ST ON ST.st_TowId = T.tw_Id AND ST.st_MagId = 1
LEFT JOIN (
SELECT ob_TowId, Sprzedaz = SUM(dok_Pozycja.ob_Ilosc)
FROM
dok_Pozycja
LEFT JOIN dok__Dokument ON ob_DokHanId = dok_id
WHERE
dok_DataWyst BETWEEN DATEADD(day,-30,getdate()) AND GETDATE()
AND dok_Typ = 2
AND dok_MagId = 1
AND ob_TowRodzaj = 8
GROUP BY ob_TowId
) SP ON T.tw_Id = SP.ob_TowId
WHERE
T.tw_Zablokowany = 0
AND T.tw_Rodzaj = 8
AND T.tw_IdGrupa IN(1,4)
AND T.tw_Nazwa NOT LIKE 'ści%'
AND T.tw_Nazwa NOT LIKE 'wyk%'
ORDER BY  T.tw_Symbol
Jakby co to zwróć uwagę że warunek na rodzaj i magazyn występuje dwa razy.

A jakbyś chciał zestawienie, które wyliczy wszystko jak należy to juz zapraszam na PW, bo to trochę więcej dłubania.
Tytuł: Odp: sql dodanie tabeli
Wiadomość wysłana przez: Paweł Em w Kwiecień 28, 2021, 14:32:12
Candy dziękuję Ci bardzo. Tak świadomie wybrałem tylko komplety. Jak będę potrzebował cokolwiek z SQL to pierwsze miejsce gdzie się będę zgłaszał to Twój priv.$

I tak jeszcze napisze ku przestrodze dla innych użytkowników, jeżeli myślicie że chwilę poczytacie i gdzieś Wam tam dzwoni, to żeby nie marnować czasu trzeba to zadanie oddelegować ludziom którzy są biegli w tej dziecinie czyli min. użytkownik CANDY.