2013-10-23 38 views
0

我正在运行一个查询来检查一家公司的数据使用情况 ,并偶然发现问题,我注意到最终状态下的KB使用情况超出了应有的水平。退款脚本运行错误。SQL退款计算错误

我诊断出这个问题,并注意到: 在备用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 

在spare1中,我们将得到“退税”字符串和域spare2会有价值。 我想要做的是如果该值大于0,例如300它将显示为-300或类似的东西。

回答

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语句,您可以在查询

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 
0

操纵值为了提供另一种选择 - 使用Abs() function

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

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