stany magazynowe

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

Lukasz
Posty: 75
Rejestracja: 30 lip 2009, 17:07
Rola: Administrator CDN XL
Wersja: 9.7

stany magazynowe

Post autor: Lukasz »

Witam Was

Mam mały zong , z zapytaniem wyciagajacym stany magazynowe (ilosc dostepna na magazynie) ,
wyklepalem cos takiego :

Kod: Zaznacz cały


SELECT 
CDN.TwrKarty.Twr_Kod, 
SUM(CDN.TwrZasoby.TwZ_IlMag) AS [Ilość na Magazynie],
CDN.Magazyny.MAG_Kod As Magazyn
FROM  CDN.TwrZasoby LEFT OUTER JOIN
           CDN.Magazyny ON CDN.TwrZasoby.TwZ_MagNumer = CDN.Magazyny.MAG_GIDNumer LEFT OUTER JOIN
           CDN.TwrKarty ON CDN.TwrZasoby.TwZ_TwrNumer = CDN.TwrKarty.Twr_GIDNumer
WHERE (CDN.TwrKarty.Twr_Typ = 1)
GROUP BY CDN.TwrKarty.Twr_Kod, CDN.TwrZasoby.TwZ_IlMag, CDN.Magazyny.MAG_Kod
ORDER BY CDN.TwrKarty.Twr_Kod, CDN.Magazyny.MAG_Kod
Problem z wynikami jest taki , ze jezeli na dany towar sklada sie kilka dostaw to dany kod towaru jest tyle razy powielany ,
chcialbym tego uniknac .
Mozecie doradzic ?

Pozdr
Loko
zpoe
Posty: 55
Rejestracja: 13 cze 2008, 08:55
Rola: Administrator CDN XL
Wersja: 10

Re: stany magazynowe

Post autor: zpoe »

z sekcji grupowania usuń CDN.TwrZasoby.TwZ_IlMag
Lukasz
Posty: 75
Rejestracja: 30 lip 2009, 17:07
Rola: Administrator CDN XL
Wersja: 9.7

Re: stany magazynowe

Post autor: Lukasz »

.....dzieki wielkie !!! ,
nie zauwazylem tego

Pozdr
Loko
Lukasz
Posty: 75
Rejestracja: 30 lip 2009, 17:07
Rola: Administrator CDN XL
Wersja: 9.7

Re: stany magazynowe

Post autor: Lukasz »

....to przy okazji mam pytanie , jak mam wiele magazynów i nie chcialbym aby dane dla kazdego z nich byly
prezentowane w kolejnych wierszach tylko dla danego magazynu w kolumnie ,mozecie doradzic :?:


Pozdr
Loko
A.Poniatowski
Posty: 9
Rejestracja: 27 kwie 2010, 11:33
Rola: Inny
Wersja: 9.6

Re: stany magazynowe

Post autor: A.Poniatowski »

Korzystajac z Twojego zapytania wystarczy ze dodasz sobie pivota, zamiast, mag1, mag2, i mag3 wprowadz nazwy magazynow.

Kod: Zaznacz cały

select * from 
(
	SELECT 
	CDN.TwrKarty.Twr_Kod, 
	CDN.TwrZasoby.TwZ_IlMag AS IloscNaMag,
	CDN.Magazyny.MAG_Kod As Magazyn
	FROM  CDN.TwrZasoby LEFT OUTER JOIN
			   CDN.Magazyny ON CDN.TwrZasoby.TwZ_MagNumer = CDN.Magazyny.MAG_GIDNumer LEFT OUTER JOIN
			   CDN.TwrKarty ON CDN.TwrZasoby.TwZ_TwrNumer = CDN.TwrKarty.Twr_GIDNumer
	WHERE (CDN.TwrKarty.Twr_Typ = 1)
) as StanyMag
PIVOT
(
	SUM (StanyMag.IloscNaMag) for Magazyn IN ([mag1],[mag2],[mag3])
) as Pvt
order by Twr_Kod
Mozna to tez zapisac bardziej uniwersalnie, jednak nie zawsze mozemy zastosowac takie rozwiazanie:

Kod: Zaznacz cały

declare @kod nvarchar(max)
set @kod = N'
select * from 
(
	SELECT 
	CDN.TwrKarty.Twr_Kod, 
	CDN.TwrZasoby.TwZ_IlMag AS IloscNaMag,
	CDN.Magazyny.MAG_Kod As Magazyn
	FROM  CDN.TwrZasoby LEFT OUTER JOIN
			   CDN.Magazyny ON CDN.TwrZasoby.TwZ_MagNumer = CDN.Magazyny.MAG_GIDNumer LEFT OUTER JOIN
			   CDN.TwrKarty ON CDN.TwrZasoby.TwZ_TwrNumer = CDN.TwrKarty.Twr_GIDNumer
	WHERE (CDN.TwrKarty.Twr_Typ = 1)
) as StanyMag PIVOT
(
	SUM (StanyMag.IloscNaMag) for Magazyn IN ('+CAST(
stuff( (select distinct ',['+MAG_Kod+']' 
from CDN.Magazyny FOR XML PATH('')),1,1,'') as nvarchar(max))+')
) as Pvt
order by Twr_Kod'
exec sp_executesql @kod
Pozdr
Alek
Lukasz
Posty: 75
Rejestracja: 30 lip 2009, 17:07
Rola: Administrator CDN XL
Wersja: 9.7

Re: stany magazynowe

Post autor: Lukasz »

...dzieki za wszelkie propozycje, U mnie wyszło to tak:

Kod: Zaznacz cały


@PAR ?@S20|kod_towaru|Początek kodu towaru:% @? PAR@
@PAR ?@EOL PAR@
@PAR ?@EOL PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE'  order by 2)|Mag1|&Magazyn 1:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag2|&Magazyn 2:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag3|&Magazyn 3:REG= @? PAR@
 
SELECT
 1 AS id,
 W.Kod AS [Kod towaru],
 W.Nazwa AS [Nazwa towaru],
 sum(CASE WHEN W.Magazyn = ??Mag1 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 1],
 sum(CASE WHEN W.Magazyn = ??Mag2 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 2],
 sum(CASE WHEN W.Magazyn = ??Mag3 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 3]
FROM
 (
 SELECT      
  TWR.Twr_Kod AS Kod, 
  TWR.Twr_Nazwa AS Nazwa,
  SUM(ZAS.TwZ_IlMag) AS Ilosc, 
  ZAS.TwZ_MagNumer AS Magazyn
 FROM         
  CDN.TwrZasoby AS ZAS LEFT OUTER JOIN
  CDN.TwrKarty AS TWR ON ZAS.TwZ_TwrNumer = TWR.Twr_GIDNumer
 WHERE     
  TWR.Twr_Typ = 1 AND 
  TWR.Twr_Kod LIKE ??kod_towaru + '%' AND
  ZAS.TwZ_MagNumer IN (??Mag1, ??Mag2, ??Mag3)
 GROUP BY 
  TWR.Twr_Kod, 
  TWR.Twr_Nazwa,
  ZAS.TwZ_IlMag, 
  ZAS.TwZ_MagNumer
 HAVING
  SUM(ZAS.TwZ_IlMag) <> 0
 ) AS W
GROUP BY
 W.Kod, W.Nazwa
ORDER BY 
 W.Kod

Pozdr
Loko
novell1
Posty: 58
Rejestracja: 30 wrz 2008, 08:47
Rola: Inny
Wersja: 9.7

Re: stany magazynowe

Post autor: novell1 »

1. Jak przerobić to zapytanie aby wykres pokazywał stany towarów zbiorczo na wszystkich magazynach.

2. Jak zbudować zapytanie na wykresie : stany wszystkich towarów na wszystkich składach celnych.

Z poważaniem

księgowy
Mr.Dree
Posty: 66
Rejestracja: 31 paź 2008, 10:42
Rola: Administrator CDN XL
Wersja: 8.0 HR1

Re: stany magazynowe

Post autor: Mr.Dree »

Witam,
Odświeżam stary temat próbuję do tego raportu dodać dodatkowo sprzedaż ale nie mogę sobie poradzić.
Może ktoś bardziej doświadczony by mi pomógł. Z góry dzięki.

Kod: Zaznacz cały

@PAR ?@S20|kod_grupy|Początek kodu grupy:% @? PAR@
@PAR ?@S20|kod_towaru|Początek kodu towaru:% @? PAR@
@PAR ?@EOL PAR@
@PAR ?@D17|Data_Od|Data &od:{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|Data_Do|Data &do:{Today()} @? PAR@
@PAR ?@EOL PAR@
@PAR ?@R(SELECT MAG_GIDNumer, MAG_Kod FROM CDN.Magazyny)|Mags|&Magazyn:REG= 1 @? PAR@
@PAR ?@EOL PAR@
@PAR ?@EOL PAR@
@PAR ?@EOL PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag1|&Magazyn 1:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag2|&Magazyn 2:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag3|&Magazyn 3:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag4|&Magazyn 4:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag5|&Magazyn 5:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag6|&Magazyn 6:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag7|&Magazyn 7:REG= @? PAR@

SELECT
1 AS id,
W.KodG AS [Kod grupy],
W.Kod AS [Kod towaru],
W.Nazwa AS [Nazwa towaru],
SUM (CASE WHEN W.Magazyn = ??Mag1 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 1],
SUM (CASE WHEN W.Magazyn = ??Mag2 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 2],
SUM (CASE WHEN W.Magazyn = ??Mag3 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 3],
SUM (CASE WHEN W.Magazyn = ??Mag4 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 4],
SUM (CASE WHEN W.Magazyn = ??Mag5 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 5],
SUM (CASE WHEN W.Magazyn = ??Mag6 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 6],
SUM (CASE WHEN W.Magazyn = ??Mag7 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 7],
SUM (W.Iloscs) AS [ilosc sprzedana]
FROM
(
SELECT 
  TGD2.TGD_Kod AS KodG,  
  TWR.Twr_Kod AS Kod, 
  TWR.Twr_Nazwa AS Nazwa,
  SUM(ZAS.TwZ_IlSpr) AS Ilosc, 
  ZAS.TwZ_MagNumer AS Magazyn,
  SUM(TRE.Tre_Ilosc) AS Iloscs
FROM
  CDN.TraElem AS TRE INNER JOIN
  CDN.TraNag AS TRA ON TRA.Trn_GIDNumer=TRE.Tre_GIDNumer AND TRA.Trn_GIDTyp=TRE.TrE_GIDTyp  INNER JOIN       
  CDN.TwrZasoby AS ZAS LEFT OUTER JOIN
  CDN.TwrKarty AS TWR ON ZAS.TwZ_TwrNumer = TWR.Twr_GIDNumer AND  TRE.Tre_TwrNumer=TWR.Twr_GIDNumer INNER JOIN
  CDN.TwrGrupyDom AS TGD1 ON Twr_GIDNumer = TGD1.TGD_GIDNumer INNER JOIN
  CDN.TwrGrupyDom AS TGD2 ON (TGD1.TGD_GrONumer = TGD2.TGD_GIDNumer)
WHERE
  TGD1.TGD_GIDTyp = 16  AND
  TGD2.TGD_GIDTyp = -16 AND
  TGD2.TGD_Kod LIKE ??kod_grupy  + '%' AND  
  TWR.Twr_Typ = 1 AND 
  TWR.Twr_Kod LIKE ??kod_towaru + '%' AND
  ZAS.TwZ_MagNumer IN (??Mag1, ??Mag2, ??Mag3, ??Mag4, ??Mag5, ??Mag6, ??Mag7) AND
  TRA.Trn_GIDTyp IN (2033,  2041, 2034, 2042, 2001, 2009) AND
  TRA.Trn_SpiTyp <>0 AND
  TRA.Trn_SpiNumer <>0 AND
  TRA.TRN_DATA3 >=??Data_Od AND 
  TRA.TRN_DATA3 <=??Data_Do AND
  TRA.TRN_MagZNumer =??Mags
GROUP BY
  TGD2.TGD_Kod, 
  TWR.Twr_Kod, 
  TWR.Twr_Nazwa,
  ZAS.TwZ_IlSpr, 
  ZAS.TwZ_MagNumer,
  TRE.Tre_Ilosc
HAVING
  SUM(ZAS.TwZ_IlSpr) <> 0
) AS W
GROUP BY
W.KodG, W.Kod, W.Nazwa
ORDER BY 
W.KodG, W.Kod
Paweł
Admin
elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: stany magazynowe

Post autor: elmiq »

A to zapytanie

Kod: Zaznacz cały

SELECT
  TGD2.TGD_Kod AS KodG, 
  TWR.Twr_Kod AS Kod,
  TWR.Twr_Nazwa AS Nazwa,
  SUM(ZAS.TwZ_IlSpr) AS Ilosc,
  ZAS.TwZ_MagNumer AS Magazyn,
  SUM(TRE.Tre_Ilosc) AS Iloscs
FROM
  CDN.TraElem AS TRE INNER JOIN
  CDN.TraNag AS TRA ON TRA.Trn_GIDNumer=TRE.Tre_GIDNumer AND TRA.Trn_GIDTyp=TRE.TrE_GIDTyp  INNER JOIN       
  CDN.TwrZasoby AS ZAS LEFT OUTER JOIN
  CDN.TwrKarty AS TWR ON ZAS.TwZ_TwrNumer = TWR.Twr_GIDNumer AND  TRE.Tre_TwrNumer=TWR.Twr_GIDNumer INNER JOIN
  CDN.TwrGrupyDom AS TGD1 ON Twr_GIDNumer = TGD1.TGD_GIDNumer INNER JOIN
  CDN.TwrGrupyDom AS TGD2 ON (TGD1.TGD_GrONumer = TGD2.TGD_GIDNumer)
To chyba nie do końca działa :) Poza tym nie jest Ci potrzebny join do TwrKarty - Gid, Kod i Nazwę masz już w Traelem.
Mateusz Świerkosz

http://elmiq.blogspot.com/
Mr.Dree
Posty: 66
Rejestracja: 31 paź 2008, 10:42
Rola: Administrator CDN XL
Wersja: 8.0 HR1

Re: stany magazynowe

Post autor: Mr.Dree »

Dzięki za odzew ale mam jeszcze problem.
Zrobiłem wg twojej sugestii ale teraz błędnie wylicza mi stany magazynowe chyba źle połączyłem tabele.

Kod: Zaznacz cały

@PAR ?@S20|kod_grupy|Początek kodu grupy:% @? PAR@
@PAR ?@EOL PAR@
@PAR ?@R(SELECT MAG_GIDNumer, MAG_Kod FROM CDN.Magazyny)|Mags|&Magazyn:REG= 1 @? PAR@
@PAR ?@EOL PAR@
@PAR ?@D17|Data_Od|Data &od:{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|Data_Do|Data &do:{Today()} @? PAR@
@PAR ?@EOL PAR@
@PAR ?@EOL PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE'  order by 2)|Mag1|&Magazyn 1:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag2|&Magazyn 2:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag3|&Magazyn 3:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag4|&Magazyn 4:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag5|&Magazyn 5:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag6|&Magazyn 6:REG= @? PAR@
@PAR ?@R(SELECT Mag_GIDNumer, Mag_Kod FROM cdn.Magazyny WHERE CDN.Magazyny.Mag_Kod <> 'SKŁAD' AND  CDN.Magazyny.Mag_Kod <> 'NIE' order by 2)|Mag7|&Magazyn 7:REG= @? PAR@

SELECT
1 AS id,
W.KodG AS [Kod grupy],
W.Nazwa AS [Nazwa towaru],
sum(CASE WHEN W.Magazyn = ??Mag1 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 1],
sum(CASE WHEN W.Magazyn = ??Mag2 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 2],
sum(CASE WHEN W.Magazyn = ??Mag3 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 3],
sum(CASE WHEN W.Magazyn = ??Mag4 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 4],
sum(CASE WHEN W.Magazyn = ??Mag5 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 5],
sum(CASE WHEN W.Magazyn = ??Mag6 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 6],
sum(CASE WHEN W.Magazyn = ??Mag7 THEN W.Ilosc ELSE 0 END) AS [Ilość na Magazynie 7],
W.Iloscs AS [Ilość Sprzedana]
FROM
(
SELECT 
  TGD2.TGD_Kod AS KodG,   
  TRE.Tre_TwrNazwa AS Nazwa,
  SUM(ZAS.TwZ_IlMag) AS Ilosc, 
  ZAS.TwZ_MagNumer AS Magazyn,
  SUM(TRE.Tre_Ilosc) AS Iloscs
FROM         
  CDN.TwrZasoby AS ZAS LEFT OUTER JOIN
  CDN.TraElem AS TRE ON ZAS.TwZ_TwrNumer = TRE.Tre_TwrNumer INNER JOIN
  CDN.TraNag AS TRA ON TRA.Trn_GIDNumer=TRE.Tre_GIDNumer AND TRA.Trn_GIDTyp=TRE.TrE_GIDTyp  INNER JOIN
  CDN.TwrGrupyDom AS TGD1 ON TRE.TRE_TwrNumer = TGD1.TGD_GIDNumer INNER JOIN
  CDN.TwrGrupyDom AS TGD2 ON (TGD1.TGD_GrONumer = TGD2.TGD_GIDNumer)
WHERE
  TGD1.TGD_GIDTyp = 16  AND
  TGD2.TGD_GIDTyp = -16 AND
  TGD2.TGD_Kod LIKE ??kod_grupy  + '%' AND  
  TRE.TRE_TypTwr = 1 AND 
  ZAS.TwZ_MagNumer IN (??Mag1, ??Mag2, ??Mag3, ??Mag4, ??Mag5, ??Mag6, ??Mag7) AND
  TRA.Trn_GIDTyp IN (2033,  2041, 2034, 2042, 2001, 2009) AND
  TRA.Trn_SpiTyp <>0 AND
  TRA.Trn_SpiNumer <>0 AND
  TRA.TRN_DATA3 >=??Data_Od AND 
  TRA.TRN_DATA3 <=??Data_Do AND
  TRA.TRN_MagZNumer =??Mags
GROUP BY
  TGD2.TGD_Kod,  
  TRE.TRE_TwrNazwa,
  ZAS.TwZ_IlMag, 
  ZAS.TwZ_MagNumer
HAVING
  SUM(ZAS.TwZ_IlMag) <> 0
) AS W
GROUP BY
W.Nazwa, W.KodG, W.Iloscs
ORDER BY 
W.KodG
Paweł
Admin
ODPOWIEDZ