在 SQL Server 2014 中满足条件时如何选择 ABS(Value)?

Posted

技术标签:

【中文标题】在 SQL Server 2014 中满足条件时如何选择 ABS(Value)?【英文标题】:How to Select ABS(Value) when a condition is being met in SQL Server 2014? 【发布时间】:2017-12-04 19:23:10 【问题描述】: 如果帐户为“预付”(PlanCode = P0100),则所欠余额为负数(例如,如果他们欠 100 美元,则为 -100。

当帐户为“后付费”(PlanCode = P0200)时,欠余额为正数(例如,如果欠 100 美元,则为 100)

一些 PrePaid 帐户欠款,因此余额显示为正数(例如,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

【问题讨论】:

【参考方案1】:

如果我理解正确:

WHERE (A.PlanCode = P0100 AND A.CurrentBalance >= 5) OR
      (A.PlanCode = P0200 AND A.CurrentBalance <= -5) 

【讨论】:

我之前尝试过类似的方法。但记录不匹配。它没有显示欠一大笔钱的预付账户。我也试过你的代码。 对不起。我使用了你的代码并且它有效。必须稍作改动以适应我的数据。

以上是关于在 SQL Server 2014 中满足条件时如何选择 ABS(Value)?的主要内容,如果未能解决你的问题,请参考以下文章

SQL server如何查询满足条件的前3数据

SQL Server:对列的每个组值求和(或差),直到在另一列上满足条件

我需要从 SQL Server 查询中获取前 5 条记录,但要计算满足 where 子句条件的所有记录

SQL Server判断语句(IF ELSE/CASE WHEN )

SQL Server 2014 - 选择具有两个条件的语句

sql查询并新增一列,按条件排序后给这一列赋值,并满足条件按序列赋值