Я пытаюсь преобразовать строку в столбцы, основанные на отформатированных датах "гггг-МММ", и хотя это работает, как и ожидалось, в течение текущего месяца, это не работает в течение будущих месяцев, и я не могу понять, как это исправить, и был бы очень признателен за любые отзывы по этому поводу.
Вот немного предыстории: Я приобрел количество, поступающее из сводной таблицы поставщика, которая включает информацию о контракте, такую как тип контракта, количество, номер партии, дата создания, отформатированная в "гггг-МММ", поскольку фактическая дата для этой цели не имеет значения.
Оставшееся количество-это еще одно поле, взятое из таблицы операций книги товаров, которая, по сути, суммирует все виды операций на основе номера партии.
Потребленное количество-это то, что я пытаюсь свернуть на основе месяца, в котором оно было израсходовано, а также из записей книги товаров с фильтром типа записи
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
РЕЗУЛЬТАТ (отображается только частично):
Как вы можете видеть, вторая запись технологии ABC показывает потребление в 2021-октябре, что является точным, однако, исходя из этой контрактной суммы, купленной также в 2021-октябре, и того, что осталось в этой записи, потребление должно составлять 9 373 и меньше (383) по сравнению с 8 990, которые он точно отображает в 2021-октябре. В этом случае фактическое потребление 383 падает в 2021-ноябре, однако мой код, похоже, этого не улавливает.
Это также относится к обоим записям Zebra technologies, где оставшееся значение равно 0, что означает, что оно было полностью израсходовано, однако, поскольку даты контрактов на покупку для них обоих указаны в 2021-сентябре, а потребление-в будущем месяце 2021-октябрь, сценарий SQL этого не учитывает.
Я был бы признателен за любые рекомендации, которые помогут это исправить, и заранее благодарю.