我寫了代碼給我關於已被置於某個保持狀態的帳戶的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」條件消除了它們。你的意思是「和ABS([CurrentBalance])> 25」? – EdmCoff
這可能不起作用,因爲一些PostPaid帳戶也有負平衡,因爲他們有時會支付額外的費用(超過他們到期的費用) – user1777929
好的,但是這種情況是您問題的根源嗎?你可以把你想要的任何案例陳述放在那裏。 (如果這是條件,可以將SELECT子句中的相同case語句放入WHERE ...> 25子句中)。 – EdmCoff