0

我有一个表,我想使用 Visual basic 6 平台中的单个 SQL 语句根据 where 子句选择和减去求和列。下面是描述这里是一个示例表,可以更好地解释:

ID存款取款日期
ACC01 1000 0 2012 年 10 月 10 日
ACC01 2000 0 1/1/2013
ACC02 3000 0 2012 年 10 月 10 日
ACC02 4000 0 1/1/2013
ACC01 0 1000 2012 年 12 月 12 日
ACC02 0 3000 2012 年 12 月 12 日

我想将日期小于 2013 年 1 月 1 日的存款列中的值求和为日期小于 2013DepositBefore 年 1 月 1 日的提款列中的值,WithDrawalBefore 然后减去WithdrawalBeforeDepositBeforeBalanceBefore = DepositBefore - WithrawalBefore

同样,存款列中日期 >= 2013年 1 月 1 日的DepositAfter 总和为 日期 >= 2013 年 1 月 1 日的Withdrawal列中的总和,WithdrawalAfter 因此 ( BalanceAfter = DepositAfter - WithdrawalAfter)

最后计算BalanceForInterest = BalanceBefore + BalanceAfter. 如果单个查询可以解决此问题,我会更喜欢提前致谢

下面是我尝试过但没有成功的代码。

With rsSaving
.Open "SELECT SUM(SUM(Deposit)-SUM(Withdrawal)) AS BalanceBefore FROM tblSaving WHERE  ID = 'ACC01' AND Date < #1/1/2013# GROUP BY ID, (SELECT SUM(SUM(Deposit)-SUM(Withdrawal)) AS BalanceAfter FROM tblSaving WHERE ID='ACC01' AND Date >= #1/1/2013# GROUP BY ID)",conDB, adOpenDynamic, adLockOptimistic 
.close
End With
set rsSaving = Nothing

rsSaving 是一个 ADO 对象,而 conDB 是我的连接。谢谢

4

2 回答 2

1

这是 SQL 查询。您可能必须更改数据库的语法(SQL、Access 等)。您不需要 aGroupBy因为您要返回一个值。给定您的示例数据,此查询返回 2000。

SELECT 
        (SELECT SUM(Deposit-Withdrawal) AS Total FROM tblSaving WHERE ID = 'ACC01' AND Date < '1-1-2013')
      + (SELECT SUM(Deposit-Withdrawal) AS Total FROM tblSaving WHERE  ID = 'ACC01' AND Date >= '1-1-2013')
        AS BalanaceAfter
于 2013-06-27T17:12:09.690 回答
0

你可以这样写

declare @BalanceBefore  int
set @BalanceBefore = (select sum(deposit ) from table where date < 1/1/2013)


declare @WithdrawalAfter int
set @WithdrawalAfter = (select sum(WithdrawalAfter ) from table where date > 1/1/2013)

declare @res int
set @res = @BalanceBefore   - @WithdrawalAfter 

print @res

尝试这样的事情。还要检查日期比较

于 2013-06-27T17:13:06.550 回答