私は特定のホールドステータスに置かれたアカウントのCurrentBalanceを私に与えるコードを書いた。SQL Serverの正のバランスと負のバランスを計算するにはどうすればいいですか?
問題がある:彼らは後払いアカウントの場合
- はその後によりバランスは正の数です。
- 前払いのアカウントの場合、残高は負の数になります。
私のコードは次のとおりです(私に任意のプリペイドアカウントを与えるものではありません):
SELECT A.[AccountId]
,AccountNumbe]
,AccountStatusId
,AccountTypeId
,CASE WHEN P.PlanCode = 'P0100'
THEN 'PrePaid'
WHEN P.PlanCode = 'P0200'
THEN 'PostPaid'
END PlanType
,CASE WHEN P.PlanCode = 'P0100'
THEN ABS([CurrentBalance])
WHEN P.PlanCode = 'P0200'
THEN [CurrentBalance]
END CurrentBalance
,HoldStatusId
,D.Last_Change
FROM [Account] A
INNER JOIN (
SELECT AccountId
,MAX(Created) Last_Change
FROM HoldHistory
WHERE ToHoldStatusId IN (1,2,11)
GROUP BY AccountId
) D
ON A.AccountID = D.AccountId
INNER JOIN AccountPlan P ON A.AccountId = P.AccountId
WHERE HoldStatusId IN (1,2,11)
AND AccountStatusId IN (1,2)
AND DATEDIFF (DAY, D.Last_Change, GETDATE()) > 180
AND [CurrentBalance] > 25
ORDER BY PlanType --CurrentBalance DESC, AccountNumber
--
しかし、私はこのクエリを実行すると、私はすべてのポストペイドのアカウントを取得します。私は前払いの口座を持っていません。
私が行う場合:
AND ABS([CurrentBalance]) > 25 --instead of AND [CurrentBalance] > 25
一部後払いのアカウントは、彼らが来月の法案を補うことになっているよりも多くを支払うので、次にそれが動作しない場合があります。それは彼らを負のバランスに置きます。
提案がありますか?私のコードのどこにエラーがありますか?
前払いの残高が負の場合、あなたの "AND [CurrentBalance]> 25"の条件で除算されたとみなします。 "AND ABS([CurrentBalance])> 25"を意味しますか? – EdmCoff
一部のポストペイド口座に負の残高があるため、時には余分な金額を支払うこともあるので、それはうまくいかないかもしれません。 – user1777929
それは問題の原因ですか?あなたはあなたがそこに望むどんなcase文も置くことができます。 (SELECT句から同じcase文をWHERE ...> 25句に入れることができます)。 – EdmCoff