Próbuję przekonwertować ciąg w kolumny oparte na sformatowanych datach "dd-MMM", a mimo to działa, jak się spodziewano, w ciągu bieżącego miesiąca, to nie działa w ciągu nadchodzących miesięcy i nie mogę zrozumieć, jak to naprawić, i byłbym bardzo wdzięczny za wszelkie opinie na ten temat.
Oto trochę historii: Kupiłem ilość pochodzące z tabeli przestawnej dostawcy, który zawiera informacje o umowie, takie jak rodzaj umowy, ilość, numer partii, data utworzenia, sformatowana w "dd-MMM", ponieważ faktyczna data na ten cel nie ma znaczenia.
Pozostała ilość jest jeszcze jedno pole, wzięte z tabeli operacji książki towarów, która, w istocie, streszcza wszystkie rodzaje operacji na podstawie numeru partii.
Потребленное ilość-to jest to, co staram się toczyć na podstawie miesiąca, w którym zostało wydane, a także z zapisów książki towarów z filtrem typu rekordu
SELECT *
FROM
(
SELECT VS.[Vendor Name], VS.[Vendor No_] AS 'Vendor_No', VS.[Date] AS 'Date',
SUM(VS.Quantity) AS 'Contracted_Quantity',
SUM(CQ.Consumed_Qty*-1) AS 'Consumed_Qty',
SUM(RQ.Remaining_Qty) AS Remaining_Qty,
'Contract Type' =
CASE
WHEN VS.[Contract Type] = 1 THEN 'CONTRACT A'
WHEN VS.[Contract Type] = 2 THEN 'CONTRACT B'
ELSE 'OTHERS'
END
FROM
(SELECT [Document No_],[Vendor No_],[Lot No_],FORMAT([Date Created], 'yyyy-MMM') AS 'Date'
,[Purch_ Contract No_],[Contract Type],[Quantity] FROM [A].[dbo].[Company$Volume Summary]) VS
/*to identify remaining quantity by lot (Lot no. is included in my VS alias statement)*/
LEFT JOIN (SELECT [Lot No_] ,SUM([Remaining Quantity]) AS Remaining_Qty FROM [A].[dbo].[Company$Item Ledger Entry]
GROUP BY [Lot No_]) RQ on RQ.[Lot No_] = VS.[Lot No_]
/*to identify consumed volume, if consumption is in future month compared to purchase month, it doesn't populate, this is where I believe the problem is*/
LEFT JOIN (SELECT [Lot No_],FORMAT([Posting Date], 'yyyy-MMM') AS 'Date',SUM([Quantity]) AS Consumed_Qty
FROM [A].[dbo].[Company$Item Ledger Entry]
WHERE [Entry Type] = '5'
GROUP BY [Lot No_], Format([Posting Date], 'yyyy-MMM')) CQ on CQ.[Lot No_] = VS.[Lot No_] and CQ.Date >= VS.[Date]
GROUP BY VS.[Vendor Name], FORMAT(VS.[Date Created],'yyyy-MMM'), PT.[Contract Type], VS.[Vendor No_]
) cs
PIVOT
(
SUM(Consumed_Qty)
for Date in ([2021-Sep], [2021-Oct], [2021-Nov])
) pvt
WYNIK (pojawia się tylko częściowo):
Jak widać, drugi wpis technologii ABC pokazuje zużycie w 2021-październiku, co jest dokładne, jednak na podstawie tej kwoty kontraktowej, kupiony również w 2021-październiku, i tego, co zostało w tym wpisie, spożycie powinno wynosić 9 373 i mniej (383) w porównaniu z 8 990, które dokładnie pokazuje w 2021-październiku. W tym przypadku rzeczywiste zużycie 383 spada w 2021-listopadzie, jednak mój kod wygląda na to, tego nie odbiera.
Odnosi się to również do obu rejestrów Zebra technologies, gdzie pozostały wartość jest równa 0, co oznacza, że było ono w pełni wydane, jednak, ponieważ chcesz kontraktów na zakup dla obu z nich są wymienione w 2021-wrześniu, a spożycie-w przyszłym miesiącu 2021-październik, skrypt SQL tego nie uwzględnia.
Byłbym wdzięczny za wszelkie wskazówki, które pomogą rozwiązać ten problem, i z góry dziękuję.