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 ?
....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
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:
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
@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
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.
@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
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.
@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