Dziwne sumowanie kolumny

Odpowiedz Nowy wątek
2018-11-22 09:01
0

Hej ostatnio popełniłem takie oto zapytanie:


declare @temptable2 as table
(WarehouseID nvarchar(128)
,   WarehouseSymbol nvarchar(128)
,   ArticleCode nvarchar(128)
,   ArticleName nvarchar(128)
,   LotId int
,   ArticleBasicUnit nvarchar(128)
,   DeliveryNumberString nvarchar(128)
,   Quantity int
,   Value int
,   UnitPrice int
,   TotalValue int
,   DeliveryDate nvarchar(128)
,   SystemCurrencySymbol nvarchar(128)
,   LackQuantity nvarchar(128)
,   ArticleId int
)

INSERT INTO @temptable2
EXEC Storage.StocksOnDate @WarehouseIDs='2',@[email protected] ,@ShowDelivery=1,@ArticleGroup=1,@FilterExpression=NULL

select * into #temp3

from

(select si.ArticleID  ,si.Code, si.Name, sum (si.Quantity) ilosc_SPRZEDANA
, Year (sh.StoreOperationDate) Rok
, month (sh.StoreOperationDate) Miesiac
, sum(si.finalprice*si.quantity) wartosc

 from SecSales.Headers sh
join Sales.ItemRows si on si.HeaderID=sh.id
join CompanyStructure.CompanyUnits cu on cu.CompanyUnitID=sh.CompanyUnitId
 JOIN DT.DocumentTypes DT ON DT.ID = sh.DocumentTypesID
 JOIN DT.States DS on sh.DocumentStateID = DS.ID
where cu.Name='Lamel Technology' and  dt.Code='MM-' and ds.StateType<>32 
and sh.StoreOperationDate >= @DATAOD 
and sh.StoreOperationDate <[email protected]
group by si.Code, si.Name,si.ArticleID
, Year (sh.StoreOperationDate) 
, month (sh.StoreOperationDate)

) x

select

-- t.code Kod_WG, t.Name Nazwa_WG,
 t.Rok, t.Miesiac,
  t.Code Kod_surowca,sa.name Nazwa_surowca,
 a.Nazwa_Atrybutu Atrybut_SUROWCA,a.Wartosc_Atrybutu Wartosc_Atrybutu_SUROWCA,
sum (t.ilosc_SPRZEDANA) ilosc_surowca
,sa.Id
,0 stan_mag
,0 wart_mag
 ,t.code code, sa.name name
from #temp3 t 

--r.ArticleCode is null
join 
    (select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru  from 
    SecAttributes.AttributeClasses ac 
    join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
    join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
    join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
    join Dic_Articles aa on aa.id=a.ObjectID
        where 
        [email protected]
        and a.ObjectTypeID=35 ) a on a.ObjectID=t.articleid

join Dic_Articles sa on sa.id=t.articleid
group by t.Rok, t.Miesiac, t.Code,
  sa.name ,sa.id,
 a.Nazwa_Atrybutu,a.Wartosc_Atrybutu 

union all

 select x.*, isnull(s1.ilosc_mag,0) stan_mag, isnull(s1.wartosc_mag,0) wart_mag, isnull(s1.Code,x.Kod_surowca) Kod, isnull(s1.name, x.Nazwa_surowca) Nazwa

  from

(select

-- t.code Kod_WG, t.Name Nazwa_WG,
 0 Rok , 0 Miesiac, t.Code Kod_surowca,
  sa.name Nazwa_surowca,
 a.Nazwa_Atrybutu Atrybut_SUROWCA,a.Wartosc_Atrybutu Wartosc_Atrybutu_SUROWCA,
sum (t.ilosc_SPRZEDANA) ilosc_surowca
,sa.Id

from #temp3 t 

--r.ArticleCode is null
join 
    (select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru  from 
    SecAttributes.AttributeClasses ac 
    join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
    join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
    join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
    join Dic_Articles aa on aa.id=a.ObjectID
        where 
        [email protected]
        and a.ObjectTypeID=35  ) a on a.ObjectID=t.ArticleID

join Dic_Articles sa on sa.id=t.ArticleId

group by 
 sa.name ,sa.id, t.Code,
 a.Nazwa_Atrybutu,a.Wartosc_Atrybutu ) x

 full outer join  ( select l.ArticleID, xyz.Quantity ilosc_mag , xyz.TotalValue wartosc_mag,DA.Code, da.Name
        from Storage.Lots l 
        join Storage.Stocks ss on ss.LotID=l.LotID
        join dic_articles da on da.Id=l.ArticleID
        join @temptable2 xyz on xyz.ArticleCode=Code
        join 
    (select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru  from 
    SecAttributes.AttributeClasses ac 
    join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
    join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
    join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
    join Dic_Articles aa on aa.id=a.ObjectID
        where 
        [email protected]
        and a.ObjectTypeID=35) a on a.ObjectID=l.ArticleID
        where ss.IsLack=0 and ss.Quantity>0 and ss.WarehouseID=2
        group by l.ArticleID, da.Code, da.name, xyz.quantity, xyz.totalvalue) s1 on s1.ArticleID=x.id

--order by t.Name, t.Code

drop table #temp3

Odpowiada ono za rotację towarów na magazynie, wg przesunięć z magazynu jednego na każdy pozostały. Na początek wywoływana jest procedura, która generuje stan magazynu na wybrany dzień i wrzucane jest wszystko do tabelki tymczasowej.
Raport wygląda tak jak w załączeniu.
I nie wiem jak rozwiązać dwie rzeczy, teraz jeśli towar rotuje to jego stan jest wrzucany w kolumny '0', a ten co nie rotował to w pierwsze kolumny, których miesiąc jest określany jako puste. Czego brakuje mi w kodzie, żeby to ładnie było segregowane? Chyba, ze przekombinowałem cała strukturę ;)

Druga sprawa, zmodyfikowałem trochę powyższy kod, aby obsługiwał inny magazyn w trochę innym zakresie. W sumie wyrzuciłem jeden warunek z WHERE (dokładnie ten [email protected]) oraz zmieniłem magazyn i dodałem warunek między, którymi magazynami przesunięcia ma wybierać. Niestety w kolumnie '0' kod zaczął mi pokazywać pięciokrotność wartości magazynu:


declare @temptable2 as table
(
    WarehouseID nvarchar(128)
,   WarehouseSymbol nvarchar(128)
,   ArticleCode nvarchar(128)
,   ArticleName nvarchar(128)
,   LotId int
,   ArticleBasicUnit nvarchar(128)
,   DeliveryNumberString nvarchar(128)
,   Quantity int
,   Value int
,   UnitPrice int
,   TotalValue int
,   DeliveryDate nvarchar(128)
,   SystemCurrencySymbol nvarchar(128)
,   LackQuantity nvarchar(128)
,   ArticleId int

)
INSERT INTO @temptable2
EXEC Storage.StocksOnDate @WarehouseIDs='15',@[email protected] ,@ShowDelivery=1,@ArticleGroup=1,@FilterExpression=NULL

select * into #temp3

from

(select si.ArticleID  ,si.Code, si.Name, sum (si.Quantity) ilosc_SPRZEDANA
, Year (sh.StoreOperationDate) Rok
, month (sh.StoreOperationDate) Miesiac
, sum(si.finalprice*si.quantity) wartosc

 from SecSales.Headers sh
join Sales.ItemRows si on si.HeaderID=sh.id
join CompanyStructure.CompanyUnits cu on cu.CompanyUnitID=sh.CompanyUnitId
 JOIN DT.DocumentTypes DT ON DT.ID = sh.DocumentTypesID
 JOIN DT.States DS on sh.DocumentStateID = DS.ID
where cu.Name='Lamel Technology' and  dt.Code='MM-' and ds.StateType<>32 and sh.SourceStoreID='15' and sh.TargetStoreID='16'
and sh.StoreOperationDate >= @DATAOD 
and sh.StoreOperationDate <[email protected]
group by si.Code, si.Name,si.ArticleID
, Year (sh.StoreOperationDate) 
, month (sh.StoreOperationDate)

) x

select

-- t.code Kod_WG, t.Name Nazwa_WG,
 t.Rok, t.Miesiac,
  t.Code Kod_surowca,sa.name Nazwa_surowca,
 a.Nazwa_Atrybutu Atrybut_SUROWCA,a.Wartosc_Atrybutu Wartosc_Atrybutu_SUROWCA,
sum (t.ilosc_SPRZEDANA) ilosc_surowca
,sa.Id
,0 stan_mag
,0 wart_mag
 ,t.code code, sa.name name
from #temp3 t 

--r.ArticleCode is null
join 
    (select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru  from 
    SecAttributes.AttributeClasses ac 
    join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
    join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
    join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
    join Dic_Articles aa on aa.id=a.ObjectID
        where 
        a.ObjectTypeID=35 ) a on a.ObjectID=t.articleid

join Dic_Articles sa on sa.id=t.articleid
group by t.Rok, t.Miesiac, t.Code,
  sa.name ,sa.id,
 a.Nazwa_Atrybutu,a.Wartosc_Atrybutu 

union all

 select x.*, isnull(s1.ilosc_mag,0) stan_mag, isnull(s1.wartosc_mag,0) wart_mag, isnull(s1.Code,x.Kod_surowca) Kod, isnull(s1.name, x.Nazwa_surowca) Nazwa

  from

(select

-- t.code Kod_WG, t.Name Nazwa_WG,
 0 Rok , 0 Miesiac, t.Code Kod_surowca,
  sa.name Nazwa_surowca,
 a.Nazwa_Atrybutu Atrybut_SUROWCA,a.Wartosc_Atrybutu Wartosc_Atrybutu_SUROWCA,
sum (t.ilosc_SPRZEDANA) ilosc_surowca
,sa.Id

from #temp3 t 

--r.ArticleCode is null
join 
    (select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru  from 
    SecAttributes.AttributeClasses ac 
    join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
    join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
    join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
    join Dic_Articles aa on aa.id=a.ObjectID
        where 
        a.ObjectTypeID=35  ) a on a.ObjectID=t.ArticleID

join Dic_Articles sa on sa.id=t.ArticleId

group by 
 sa.name ,sa.id, t.Code,
 a.Nazwa_Atrybutu,a.Wartosc_Atrybutu ) x

 full outer join  ( select l.ArticleID, xyz.Quantity ilosc_mag , xyz.TotalValue wartosc_mag,DA.Code, da.Name
        from Storage.Lots l 
        join Storage.Stocks ss on ss.LotID=l.LotID
        join dic_articles da on da.Id=l.ArticleID
        join @temptable2 xyz on xyz.ArticleID=l.ArticleID
        join 
    (select tv1.Value Nazwa_Atrybutu, tv2.Value Wartosc_Atrybutu, a.ObjectID, a.ObjectTypeID, aa.Code Kod_towaru  from 
    SecAttributes.AttributeClasses ac 
    join Dictionaries.TranslationValues tv1 on tv1.TranslationID=ac.NameTranslationID and tv1.LanguageID=1
    join Attributes.Attributes a on a.AttributeClassID=ac.AttributeClassID
    join Dictionaries.TranslationValues tv2 on tv2.TranslationID=a.ValueTranslationID and tv1.LanguageID=1
    join Dic_Articles aa on aa.id=a.ObjectID
        where 
        a.ObjectTypeID=35) a on a.ObjectID=l.ArticleID
        where ss.IsLack=0 and ss.Quantity>0 and ss.WarehouseID=15
        group by l.ArticleID, da.Code, da.name, xyz.quantity, xyz.totalvalue) s1 on s1.ArticleID=x.id

--order by t.Name, t.Code

drop table #temp3

Może uda się Wam wskazać gdzie popełniam błąd...

Pozostało 580 znaków

2018-11-22 09:23
0

Ok, kwestie sumowania wielokrotności stanu ogarnąłem, sumował wartość dla każdego atrybutu.

Pozostało 580 znaków

2018-11-22 09:37
2

Masz poczucie humoru...

Wklejasz skrypt na ponad 150 linii w screenie jakiś wynik końcowy, który nijak się ma do zapytania, nie wiemy co jest w danych które obrabiasz, dodatkowo opisujesz skrypt tak jakby struktura była oczywista dla czytającego. Jak mamy to organąć?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0