私は現在、保険会社で現在の仕事に就く前に実装されたパラドックス データベースを使用しています。
簡単に言えば、すべてのアクティブなクライアントの借方/貸方残高のクエリをコンパイルしようとしているときに、個々のクライアントごとにクエリを実行すると、クライアントごとに異なる残高が得られるということです。10 万の顧客ベースと 200 万を超える取引数では、そうするのは現実的ではありません。だからここに私が個々のクライアントのために何をするかがあります:
コード:
SELECT COUNT(Debit) as NumberOfDebits
, COUNT(Credit) as NumberOfCredit
, SUM(Debit) as DebitTotal
, SUM(Credit) as CreditTotal
FROM MemberTransactions
WHERE MemberID = '####000094';
上で述べたように、これはメンバーに適切なバランスを与えますが、次のことを行うと:
SELECT MemberID
, COUNT(Debit) as NumberOfDebits
, COUNT(Credit) as NumberOfCredit
, SUM(Debit) as DebitTotal
, SUM(Credit) as CreditTotal
FROM MemberTransactions
GROUP BY MemberID;
テーブル内のほとんどのメンバーについて、異なるカウントと合計の両方の結果が得られます。
ここに表の構造を示します。これにより、私が何を処理しなければならず、何を達成したいのかを理解できるようになります。すべての行は、メンバーのアカウントへの借方または貸方のいずれかを持つ単一のトランザクションです。したがって、私がやりたいことは、すべての借方と貸方を、すべてのメンバーごとにそれぞれ 1 つのセルに合計することです。だから私は、すべてのメンバーのすべてのクレジットとデビットを合計すると考えてグループ化しましたが、そうはなりません。では、どうすればそれについて行くことができますか。メンバーの詳細から membernr で外部結合を実行しようとしましたが、グループ化する必要があり、最終的に同じ結果が得られます
テーブル構造:
PeriodNr I
EffectiveDate D
Entrynr +
MemberNr A
Date D
JournalNr A
ReferenceNr A
DtAmount N
CtAmount N
Narration A
ModifyUserId A
ModifStamp @
私が気づいたことの1つは、次のクエリを実行した後です。
SELECT COUNT(A.CtAmount) as CreditCount
, Sum(A.CtAmount) as Credit
, COUNT(A.DtAmount) as DebitCount
, SUM(DtAmount) as Debit
, M.MemberNr
, M.Premium
FROM MemAcc as A
LEFT OUTER JOIN Member as M on A.MemberNr = M.MemberNr
GROUP BY M.MemberNr, M.Premium;
一番上に、MemberNr がなく、カウント、借方、貸方の数が非常に多い 1 つの行があります。どのアカウントよりもはるかに高いので、何らかの理由で欠落しているトランザクションがこの行に入ると推測しています。
たとえば、メンバー X を一意にクエリすると、3094 の借方と貸方が取得され、55 の借方カウントと 18 の貸方カウントが得られます。これは、そのメンバーのテーブルにあるレコードの数と一致しますが、上記のクエリを実行すると、クレジット カウント 2、デビット カウント 19、クレジット 1590、デビット 2090 が得られます。
だから私は困惑しています。これが Paradox の問題なのか、それとも私の SQL の理解不足なのかはわかりません。
そうそう、空白のメンバーのクレジット数は 273、借方カウントは 341、貸方は 19030、借方は 17168 です。