Autor Wątek: sql dodanie tabeli  (Przeczytany 4934 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
sql dodanie tabeli
« dnia: 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...  :)

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9208
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: sql dodanie tabeli
« Odpowiedź #1 dnia: Kwiecień 13, 2021, 17:16:17 »
Najlepiej wykorzystać widok vwZstSprzedWgKhnt
Sławek, Zduńska Wola

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: sql dodanie tabeli
« Odpowiedź #2 dnia: 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

Offline Paweł Szczygiel

  • Aktywny użytkownik
  • ***
  • Wiadomości: 169
  • Reputacja +4/-0
Odp: sql dodanie tabeli
« Odpowiedź #3 dnia: Kwiecień 13, 2021, 22:31:55 »
Zawsze możesz skorzystać z profilera i podsłuchać wbudowane zapytanie - zmienić ich strukturę i uzyskać oczekiwany rezultat.
Paweł Szczygieł

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4871
  • Reputacja +172/-11
sql dodanie tabeli
« Odpowiedź #4 dnia: Kwiecień 13, 2021, 22:41:02 »
Tabelę będziesz musiał aktualizować, a widok daje zawsze aktualne dane.
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: sql dodanie tabeli
« Odpowiedź #5 dnia: 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

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: sql dodanie tabeli
« Odpowiedź #6 dnia: 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

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: sql dodanie tabeli
« Odpowiedź #7 dnia: 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

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: sql dodanie tabeli
« Odpowiedź #8 dnia: 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

Offline tomaszf

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 523
  • Reputacja +12/-0
  • Wersja programu: Subiekt GT 1.66
Odp: sql dodanie tabeli
« Odpowiedź #9 dnia: 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.
« Ostatnia zmiana: Kwiecień 23, 2021, 13:02:24 wysłana przez tomaszf »

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: sql dodanie tabeli
« Odpowiedź #10 dnia: 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

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4871
  • Reputacja +172/-11
sql dodanie tabeli
« Odpowiedź #11 dnia: 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
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: sql dodanie tabeli
« Odpowiedź #12 dnia: 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

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4871
  • Reputacja +172/-11
Odp: sql dodanie tabeli
« Odpowiedź #13 dnia: 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
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline Paweł Em

  • Nowy użytkownik
  • *
  • Wiadomości: 24
  • Reputacja +0/-0
  • Wersja programu: 1.65
Odp: sql dodanie tabeli
« Odpowiedź #14 dnia: 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.

Forum Użytkownikow Subiekt GT

Odp: sql dodanie tabeli
« Odpowiedź #14 dnia: Kwiecień 27, 2021, 21:26:50 »