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

问题描述 投票:2回答:1
  • 如果账户为“预付”(PlanCode = P0100),那么余额为负数(例如,如果他们欠100美元,则为-100)。
  • 如果账户为“PostPaid”(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
sql sql-server absolute-value
1个回答
3
投票

如果我理解正确:

WHERE (A.PlanCode = P0100 AND A.CurrentBalance >= 5) OR
      (A.PlanCode = P0200 AND A.CurrentBalance <= -5) 
© www.soinside.com 2019 - 2024. All rights reserved.