Работает на: SQL Server 2012
Я пытаюсь получить кол-во использования между счетами (с 1-го по 2-е ... 3-е ...), будь то высокий или низкий.Конечное сальдо первых трех транзакций установлено на 0, так как сальдо закрытия перешло в отрицательное значение.Если доступное сальдо доступно только, перейдите к следующей транзакции в качестве начального сальдо.
Пожалуйста, предоставьте все ваши ценные предложения и поддержку для улучшения результатов запроса.
Я пытаюсь получить результат, как указано ниже (формат Excel длятолько для иллюстрации).
Мой результат:
DECLARE
@startDate DATETIME,
@endDate DATETIME,
@OpenBalance int
SET @startDate = '09/01/2018'
SET @endDate = '12/30/2018'
; WITH cteDates AS
(
SELECT
@startDate 'new_date',
@startDate 'end_date',
1 as level
UNION ALL
SELECT
DATEADD(DD,1,new_date) 'new_date',
DATEADD(DD,1,new_date),
level+1
FROM cteDates
WHERE DATEADD(dd,1,new_date) < @endDate
)
, cteInvoice AS
(
SELECT ProductID
,InvoiceNo
,InvoiceDate
,InvoiceQty
,LEAD(InvoiceDate) OVER (PARTITION BY ProductID ORDER BY InvoiceDate) AS
NextDate
FROM ##tmpInvoice AS h
JOIN cteDates ON InvoiceDate BETWEEN cteDates.new_date and
cteDates.end_date
)
, cteUsage AS
(
SELECT ProductID, TransactionDate, Quantity
FROM ##tmpUsage
JOIN cteDates ON TransactionDate BETWEEN cteDates.new_date and
cteDates.end_date
)
SELECT cteInvoice.*
,o.UsageQty
,ROW_NUMBER() OVER (PARTITION BY
cteInvoice.ProductID,CteInvoice.InvoiceDate ORDER BY
cteInvoice.InvoiceNo) AS RowNumber
FROM cteInvoice
OUTER APPLY (SELECT SUM(Quantity) AS UsageQty
FROM cteUsage
WHERE (cteInvoice.ProductId = cteUsage.ProductID)
AND (TransactionDate >= cteInvoice.InvoiceDate
AND TransactionDate < cteInvoice.NextDate)
GROUP BY cteUsage.ProductID) AS o
OPTION (MAXRECURSION 0); GO