0

Visual Basic 6 プラットフォームから単一の SQL ステートメントを使用して、WHERE 句に基づいて合計列を選択および減算する単一のテーブルがあります。以下は説明です。よりよく説明するためのサンプル表を次に示します。

IDデポジット引落日
ACC01 1000 0 2012 年 10 月 10 日
ACC01 2000 0 2013/1/1
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 日未満の預金列の値を合計し、日付が 2013 年 1 月 1DepositBefore 日未満の出金列の値を合計してから(つまり)からWithDrawalBefore 減算したいWithdrawalBeforeDepositBeforeBalanceBefore = DepositBefore - WithrawalBefore

同じように、日付 >= 1/1/2013 の預金列のDepositAfter 合計値 as またWithdrawal、日付 >= 1/1/2013 の列の値も合計する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 など) を変更する必要がある場合があります。GroupBy単一の値を取得しているため、 a は必要ありません。サンプル データを指定すると、このクエリは 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 に答える