在 SQL Server 2014 中满足条件时如何 Select ABS(值)?
How to Select ABS(Value) when a condition is being met in SQL Server 2014?
- 当账户为 'PrePaid'(PlanCode = P0100)时,所欠余额为负(例如,-100,如果他们欠 $100。
当账户为 'PostPaid'(PlanCode = P0200)时,欠款为正(例如,如果他们欠 $100,则为 100)
一些预付账户欠款,因此显示余额为正(例如;50 表示我们欠他们 50 美元)
- 一些 PostPaid 帐户也欠钱(因为他们多付了钱)并且余额显示为负数(例如;-50 表示我们欠他们 50 美元)
我想生成一份报告,显示所有欠我们 5 美元或更多的帐户。
我的代码是错误的,但也许我的逻辑是正确的?
SELECT A.[AccountId]
,A.[AccountNumber]
,CASE WHEN P.PlanCode = 'P0100' THEN 'PrePaid'
WHEN P.PlanCode = 'P0200' THEN 'PostPaid'
END PlanType
,CASE WHEN P.PlanCode = 'P0100' THEN (Select ABS(CurrentBalance) FROM Account WHERE CurrentBalance < 0)
WHEN P.PlanCode = 'P0200' THEN (Select [CurrentBalance] FROM Account WHERE CurrentBalance > 0)
END [CurrentBalance]
FROM [GEB_DWH].[dbo].[Account] A
INNER JOIN AccountPlan P ON A.AccountId = P.AccountId
WHERE A.CurrentBalance >= 5
ORDER BY CurrentBalance DESC
编辑:
我也试过:
SELECT A.[AccountId]
,A.[AccountNumber]
,CASE WHEN P.PlanCode = 'P0100' THEN 'PrePaid'
WHEN P.PlanCode = 'P0200' THEN 'PostPaid'
END PlanType
,ABS([CurrentBalance])[CurrentBalance]
--,CASE WHEN P.PlanCode = 'P0100' THEN (Select ABS(CurrentBalance) FROM Account WHERE CurrentBalance < 0)
--WHEN P.PlanCode = 'P0200' THEN (Select [CurrentBalance] FROM Account WHERE CurrentBalance > 0)
-- END [CurrentBalance]
FROM [GEB_DWH].[dbo].[Account] A
INNER JOIN AccountPlan P ON A.AccountId = P.AccountId
WHERE ((P.PlanCode = 'P0100' AND (A.CurrentBalance) < 0) OR (P.PlanCode = 'P0200' AND (A.CurrentBalance) > 0))
AND A.CurrentBalance > 5
ORDER BY CurrentBalance DESC
如果我理解正确的话:
WHERE (A.PlanCode = P0100 AND A.CurrentBalance >= 5) OR
(A.PlanCode = P0200 AND A.CurrentBalance <= -5)
- 当账户为 'PrePaid'(PlanCode = P0100)时,所欠余额为负(例如,-100,如果他们欠 $100。
当账户为 'PostPaid'(PlanCode = P0200)时,欠款为正(例如,如果他们欠 $100,则为 100)
一些预付账户欠款,因此显示余额为正(例如;50 表示我们欠他们 50 美元)
- 一些 PostPaid 帐户也欠钱(因为他们多付了钱)并且余额显示为负数(例如;-50 表示我们欠他们 50 美元)
我想生成一份报告,显示所有欠我们 5 美元或更多的帐户。
我的代码是错误的,但也许我的逻辑是正确的?
SELECT A.[AccountId]
,A.[AccountNumber]
,CASE WHEN P.PlanCode = 'P0100' THEN 'PrePaid'
WHEN P.PlanCode = 'P0200' THEN 'PostPaid'
END PlanType
,CASE WHEN P.PlanCode = 'P0100' THEN (Select ABS(CurrentBalance) FROM Account WHERE CurrentBalance < 0)
WHEN P.PlanCode = 'P0200' THEN (Select [CurrentBalance] FROM Account WHERE CurrentBalance > 0)
END [CurrentBalance]
FROM [GEB_DWH].[dbo].[Account] A
INNER JOIN AccountPlan P ON A.AccountId = P.AccountId
WHERE A.CurrentBalance >= 5
ORDER BY CurrentBalance DESC
编辑:
我也试过:
SELECT A.[AccountId]
,A.[AccountNumber]
,CASE WHEN P.PlanCode = 'P0100' THEN 'PrePaid'
WHEN P.PlanCode = 'P0200' THEN 'PostPaid'
END PlanType
,ABS([CurrentBalance])[CurrentBalance]
--,CASE WHEN P.PlanCode = 'P0100' THEN (Select ABS(CurrentBalance) FROM Account WHERE CurrentBalance < 0)
--WHEN P.PlanCode = 'P0200' THEN (Select [CurrentBalance] FROM Account WHERE CurrentBalance > 0)
-- END [CurrentBalance]
FROM [GEB_DWH].[dbo].[Account] A
INNER JOIN AccountPlan P ON A.AccountId = P.AccountId
WHERE ((P.PlanCode = 'P0100' AND (A.CurrentBalance) < 0) OR (P.PlanCode = 'P0200' AND (A.CurrentBalance) > 0))
AND A.CurrentBalance > 5
ORDER BY CurrentBalance DESC
如果我理解正确的话:
WHERE (A.PlanCode = P0100 AND A.CurrentBalance >= 5) OR
(A.PlanCode = P0200 AND A.CurrentBalance <= -5)