2017-09-08 11 views
1

私は特定のホールドステータスに置かれたアカウントの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 

一部後払いのアカウントは、彼らが来月の法案を補うことになっているよりも多くを支払うので、次にそれが動作しない場合があります。それは彼らを負のバランスに置きます。

提案がありますか?私のコードのどこにエラーがありますか?

+2

前払いの残高が負の場合、あなたの "AND [CurrentBalance]> 25"の条件で除算されたとみなします。 "AND ABS([CurrentBalance])> 25"を意味しますか? – EdmCoff

+0

一部のポストペイド口座に負の残高があるため、時には余分な金額を支払うこともあるので、それはうまくいかないかもしれません。 – user1777929

+0

それは問題の原因ですか?あなたはあなたがそこに望むどんなcase文も置くことができます。 (SELECT句から同じcase文をWHERE ...> 25句に入れることができます)。 – EdmCoff

答えて

0

前払いは負となり、後払いは正解ですか?

WHERE 
(
     (P.PlanCode = 'P0100' AND CurrentBalance < 25) 
OR (P.PlanCode = 'P0200' AND CurrentBalance > 25) 
) 
+0

しかし、前払いのマイナス残高がポストペイドのプラス残高を否定するため、現在の残高の合計は不正確になります。 – user1777929

+0

予期した結果のサンプルデータを投稿してください – Squirrel

関連する問題