2014-03-02 94 views
0

请帮忙!!!计算期间之间的金额

如何按期计算PayedManualAmount,期限在支付之间。 所以在第二支付(325),我必须获得5 在第三支付(500),我必须获得7等..

if(OBJECT_ID('tempdb..#Amount') IS NOT NULL) 
    drop table #Amount 

create table #Amount 
(
    Date    smalldatetime, 
    Disbursement  decimal(18,2), 
    PayedManualAmount decimal(18,2), 
    ForPayAmount  decimal(18,2) 
) 


INSERT INTO #AmountForPay(Date,Disbursement,PayedManualAmount,ForPayAmount) 
VALUES 
('20121226', 675.00 ,NULL ,8.37), 
('20121226', NULL ,5.00 ,0.00), 
('20121227', NULL ,NULL ,0.00), 
('20121228', NULL ,NULL ,0.00), 
('20130323', NULL ,NULL ,0.00), 
('20130324', NULL ,NULL ,0.00), 
('20130325', NULL ,NULL ,0.00), 
('20130326', NULL ,NULL ,0.00), 
('20130327', 325.00 ,NULL ,4.03),--ForPayAmount = SUM(PayedManualAmount) between 2012-12-26 and 2013-03-26 = 5 
('20130328', NULL ,4  ,0.00), 
('20130329', NULL ,NULL ,0.00), 
('20140228', NULL ,3  ,0.00), 
('20140301', NULL ,NULL ,0.00), 
('20140302', 500.00 ,NULL ,6.20), --ForPayAmount = SUM(PayedManualAmount) between 2013-03-27 and 2014-03-01 = 7 
+0

您的问题需要审查。 “支付之间”没有意义。你应该说“在a和b之间”。 “第二拨款(325)”中的325来自哪里? ... – koriander

回答

0

这不是测试(I甚至不知道如果是语法正确的,因为我写出来SSMS),但这样的事情应该工作:

DECLARE @LastProcessedID INT 
SELECT @LastProcessedID = 0 

WHILE 1 = 1 BEGIN 
    SELECT TOP 1 @CurrentID = ID 
    FROM #Amount 
    WHERE ID > @CurrentID 
    AND Disbursement IS NOT NULL 
    ORDER BY ID 

    IF @@RowCount = 0 BREAK; 

    UPDATE #Amount 
    SET ForPayAmount = (SELECT SUM(PayedManualAmount) 
         FROM #Amount 
         WHERE ID < @CurrentID 
         AND ID > @LastProcessedID) 
    WHERE ID = @CurrentID 

    SELECT @LastProcessedID = @CurrentID 
END 

请注意,您将需要一个ID列添加到您的临时表。你也许可以使用你的日期列,但我个人只是添加一个标识列。

+0

非常感谢! ))) – user3083705

+0

没问题。如果这能解决你的问题,你能否接受它作为答案? – Dan