クエリに取り組む際にアドバイスが必要です。これはフロントエンド アプリケーションで処理できますが、設計上、バックエンドでこれを実装する必要があります。私は次のものを持っています
CREATE TABLE [dbo].[openitems](
[id] [varchar](8) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[type] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[date] [smalldatetime] NULL,
[amount] [decimal](9, 2) NULL,
[daysOpen] [smallint] NULL,
[balance] [decimal](9, 2) NULL
) ON [PRIMARY]
insert into openitems values('A12399','INV','2008-12-05',491.96,123)
insert into openitems values('A12399','INV','2008-12-12',4911.37,116)
insert into openitems values('A12399','INV','2008-12-05',3457.69,109)
上の表には、顧客の未処理の請求書がすべて含まれています。最も古い請求書 (テーブルの daysOpen 列) から開始して、これらの請求書に支払いを適用する必要があります。したがって、$550.00 の支払いがある場合、最初にそれを 123 日前の請求書、つまり $491.96 -$500 (次の請求書に適用するために $8.04 を残す...など) に適用し、その記録を更新します (残高表の列) を 0.00 に変更し、次に移動して残りを適用します。それは 4911.37 ドルから 8.04 ドルになり、残りは 4903.33 ドルになります。適用する残高が残っていないため、ループは終了します。
残高列は次のようになります
0 4903.33 3457.69
注: テーブル内のすべての顧客 (約 10,000) に対してこれを行う必要があります。顧客は平均約 20 の請求書を開いています。
ありがとう