2013-10-23 37 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 
     ...