2017-09-08 138 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」條件消除了它們。你的意思是「和ABS([CurrentBalance])> 25」? – EdmCoff

+0

這可能不起作用,因爲一些PostPaid帳戶也有負平衡,因爲他們有時會支付額外的費用(超過他們到期的費用) – user1777929

+0

好的,但是這種情況是您問題的根源嗎?你可以把你想要的任何案例陳述放在那裏。 (如果這是條件,可以將SELECT子句中的相同case語句放入WHERE ...> 25子句中)。 – EdmCoff

回答

0

PrePaid是否定的,PostPaid是正確的?

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

但是,當前餘額的總額將不準確,因爲來自Prepaid的負餘額會否定PostPaid的正餘額。 – user1777929

+0

請發佈預期結果的一些示例數據 – Squirrel