0

お金でバックギャモンをプレイするプレーヤーのトランザクションの値を保存するように設計されたテーブル [Transaction] があります。ハウスは、クレジット (ゲーム内で購入して後で支払う) またはデビット (手持ちの現金で支払う) を与えることができます。取引には 4 種類あります (借方、貸方) および (「貸方決済」 - 顧客が借りている金額の一部または全部を返済し、「借方決済」 - 家がプレーヤーにお金を借りている場合に家が支払う)。私がやろうとしているのは、バランスを見つけることです。多くのSQLステートメントを試しましたが、常に何かが欠けており、バランスが正しくありません。

簡単なシナリオは次のとおりです。顧客が来店し、300 のクレジットで購入します。彼は 100 をキャッシュアウトしたので、200 を家に借りています。彼は翌日来て、100 クレジットを購入し (したがって、彼は 300 を借りている)、最終的に 1000 をキャッシュアウトします。家は彼に 500 を支払いますが、さらに 200 を借ります。家は顧客に 200 を支払うので、これは「借方決済」として保存されます。

ここに画像の説明を入力

ここに私がこれまでに持っているものがありますが、結果は常に正しいとは限りません:

SELECT     SUM(Cashout)  - ((SELECT     COALESCE (SUM(Paid), 0) AS Expr1
                            FROM          [Transaction]
                            WHERE      (Type = 'Credit Settlement'))  + SUM(Buyin) +
                          (SELECT     COALESCE (SUM(Paid), 0) AS Expr1
                            FROM          [Transaction] AS Transaction_3
                            WHERE      (Type = 'Debit Settlement') AND (Paid IS NOT NULL))) AS OutstandingDebit
FROM         [Transaction] AS Transaction_1
WHERE     (Type <> 'Debit Settlement') AND (Cashout >= 0) AND (CustomerID = 132)
4

1 に答える 1

1

これを試して。私はそれがうまくいくと信じています。残高は -200 である必要があります。誰かがそれを編集して最適化したり、よりエレガントに見せたりできると確信しています! @ジャスティン、@ティム・ロジャース、@nec tso

 SELECT (
 (SELECT coalesce(SUM(cashout),0)- 
                        ((select coalesce(sum(Buyin),0) from [Transaction] where TYPE='Credit' and CustomerID=132)
                         + (select coalesce(sum(Paid),0) from [Transaction] where TYPE='Credit' and CustomerID=132))


FROM [transaction]
WHERE TYPE='Credit'
AND CustomerID=132
)
-------------------
+
(
(SELECT coalesce(SUM(cashout),0)
                    - (select coalesce(sum(Paid),0) from [Transaction] where TYPE='Debit' AND Cashout>buyin and CustomerID=132) 
                    +  (select coalesce(sum(Cashout),0)- (select coalesce(sum(PAID),0) from [Transaction] where TYPE='Debit' AND Cashout<buyin and CustomerID=132)
                             from [Transaction] where TYPE='Debit' AND Cashout<Buyin and CustomerID=132)
                    +  (select coalesce(sum(Cashout),0)- (select coalesce(sum(PAID),0) from [Transaction] where TYPE='Debit' AND Cashout=buyin and CustomerID=132)
                             from [Transaction] where TYPE='Debit' AND Cashout=Buyin and CustomerID=132)
FROM [Transaction]
WHERE CustomerID=132
AND TYPE='Debit' 
AND Cashout>buyin )
)
--------------
-
(
select coalesce(sum(Paid),0)
from [Transaction] 
where type='Debit Settlement'
AND CustomerID =132
)
--------------
+
(
select coalesce(sum(Paid),0)
from [Transaction] 
where type='Credit Settlement'
AND CustomerID =132
)
);
于 2013-06-12T19:15:16.697 に答える