Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算期间之间的金额_Sql_Sql Server - Fatal编程技术网

Sql 计算期间之间的金额

Sql 计算期间之间的金额,sql,sql-server,Sql,Sql Server,请帮忙 如何按期间计算已付款的金额,期间介于付款之间。 因此,在第二次放款325中,我必须获得5 在第三阶段,我必须获得7分,以此类推 if(OBJECT_ID('tempdb..#Amount') IS NOT NULL) drop table #Amount create table #Amount ( Date smalldatetime, Disbursement decimal(18,2), PayedMan

请帮忙

如何按期间计算已付款的金额,期间介于付款之间。 因此,在第二次放款325中,我必须获得5 在第三阶段,我必须获得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 

这没有经过测试,我甚至不知道它在语法上是否正确,因为我在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列。你也许可以用你的日期栏来回答这个问题,但我个人只想添加一个身份栏。

你的问题需要重新审视。两次支付之间没有任何意义。你应该说在a和b之间。第二笔放款325中的325来自哪里。。。没问题。如果这解决了你的问题,你能接受它作为答案吗?