SQL退款计算错误

时间:2013-10-23 08:13:42

标签: sql sql-server-2005

我正在运行查询来检查一家公司的datausage 并且偶然发现了一个问题,我注意到最终状态下的KB使用量超过了应有的水平。退款脚本工作错误。

我已经诊断出问题,并注意到: 在备用1(退款)中,存在不是“-800”的值,有时存在>的值。 0这是一个问题,因为退款应该总是减去。

我该如何实现?我写过这个,但我不知道如何继续:

SELECT callclass,redirectingnumber,spare1,spare2
  FROM [CDR_Week_43].[dbo].[CDR-2013-10-20]
where 1=1
and mvno_id = 7
and callclass = 29
if [spare1] = 'Refund' and [spare2] > 0
then 

在备用1中,我们将获得“退款”字符串,在备用2中将有值。 我想要做的是如果值大于0,例如300它将显示为-300或类似的东西。

3 个答案:

答案 0 :(得分:0)

此查询始终返回spare2小于0:

SELECT callclass,redirectingnumber,spare1,
       case when spare2 > 0 then spare2 * -1 else spare2 end as spare2
FROM [CDR_Week_43].[dbo].[CDR-2013-10-20]
where mvno_id = 7 and callclass = 29

使用case语句,您可以在查询中操作值

答案 1 :(得分:0)

SELECT 
    CALLCLASS
    , REDIRECTINGNUMBER
    , SPARE1
    , CASE SPARE2 > 0 THEN SPARE2*-1 ELSE SPARE2 END AS SPARE2
FROM
    [CDR_Week_43].[dbo].[CDR-2013-10-20]
WHERE 
    1=1
    AND mvno_id = 7
    AND callclass = 29

答案 2 :(得分:0)

要提供其他选项 - 请使用Abs() function

  

一个返回指定数值表达式的绝对(正)值的数学函数。

SELECT ...
     , Abs(spare2) * -1 As spare2
       ...