Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 Server查询子减法_Sql_Sql Server 2008 - Fatal编程技术网

SQL Server查询子减法

SQL Server查询子减法,sql,sql-server-2008,Sql,Sql Server 2008,我有一张分类账表,请看图片 我想写一个减去DR-CR数据的查询。。并仅重新返回到期金额数据 其应省略支付金额5000,因为我们在2014年1月3日有2000,在2014年1月4日有3000 你能帮忙吗。。。我已经申请了。但是我想在我的sql查询中这样做。 SQL Server 2008没有累计总和。所以,你必须使用更复杂的表达式。其思想是取DR的累积量,然后减去积分的总和,然后选择值为正值的行 select l.* from (select l.*, (select s

我有一张分类账表,请看图片

我想写一个减去DR-CR数据的查询。。并仅重新返回到期金额数据

其应省略支付金额5000,因为我们在2014年1月3日有2000,在2014年1月4日有3000

你能帮忙吗。。。我已经申请了。但是我想在我的sql查询中这样做。
SQL Server 2008没有累计总和。所以,你必须使用更复杂的表达式。其思想是取DR的累积量,然后减去积分的总和,然后选择值为正值的行

select l.*
from (select l.*,
             (select sum(dr)
              from ledger l2
              where l2.id <= l.id
             ) as cumdr,
             sum(cr) over () as sumcr
      from ledger l
     ) l
where cumdr - sumcr > 0;

为什么不省略两个$1000值而不是一个$2000?其中任何一项加上3000美元将是5000美元,因为这是一个分类账计算。当有人付款时,它将首先调整为逾期付款。。。这就是为什么省略了2000和3000,难道不应该有一个字段来表示帐户或类似的东西吗?还有,如果付款是1000呢?那么,期望的产出是什么?我的问题是,您如何确定将使用2000美元而不是两个1000美元的金额?我相信这对你来说是有意义的,但你还没有告诉我们这个决定是如何做出的made@AbeMiessler,则按日期升序进行决策。至少我是这样接受他的答案的。然而,丹的问题仍然需要回答。