2013-08-21 37 views
-1

我想獲得價值小數在此查詢,但無法得到我收到NULL值如何得到這個十進制值,而不是空

SELECT CAST(CAST(CAST(SUM(CAST(0 AS INT)) AS DECIMAL(10, 2)) * 100 
/CAST(NULLIF(SUM(CAST(0 AS INT)) 
+ SUM(CAST(0 AS INT)) + 
SUM(CAST(0 AS INT)), 0) 
AS DECIMAL(10, 2)) AS DECIMAL(10, 2)) AS DECIMAL) 

如何讓輸出

0.00 

,而不是空在此查詢

+1

這個查詢的目的是什麼?你可以發佈你的*真實*問題嗎? –

回答

2

我甚至不先來了解所有你正在做的轉換,但你可以只是簡單的對錶達式中使用ISNULL

SELECT ISNULL(<all your calculations here>,0) 
0

太多的強制類型轉換在SQL

使用情況下,如果你不希望使用ISNULL,這是必要的,因爲你有NULLIF

SELECT 
    CAST(
    CASE 
     WHEN SUM(CAST(0 AS INT)) + SUM(CAST(0 AS INT)) + SUM(CAST(0 AS INT)) = 0 THEN 0 
     ELSE SUM(CAST(0 AS INT)) * 100.00/(SUM(CAST(0 AS INT)) + SUM(CAST(0 AS INT)) + SUM(CAST(0 AS INT))) 
    END 
    AS DECIMAL(10, 2)) 

無論如何,除以零的任何東西都是未定義的或無窮大的:不爲零。

+0

起初[我以爲WTH](http://i.stack.imgur.com/nUbhI.png),但後來我讀[這個meta post](http://meta.stackexchange.com/questions/91922/how -was-這個回答張貼-後這個問題,被封閉)。您是否禁用了JavaScript,或者從移動設備或其他內容中發佈? –

+0

@AaronBertrand:dunno。催眠術的力量? – gbn

1

整個表達式計算爲NULL,因爲您正在使用以下代碼。

NULLIF (
    SUM ( 
     CAST(0 AS INT) 
    ) + 
    SUM( 
     CAST(0 AS INT) 
    ) + 
    SUM( CAST(0 AS INT) 
    ), 
    0 
) 

我打算稍微分解一下,以便更容易理解。

CAST(0 AS INT) evaluates to 0 

SUM(CAST(0 AS INT)) evaluates to 0 

SUM(CAST(0 AS INT)) + 
SUM(CAST(0 AS INT)) + 
SUM(CAST(0 AS INT)) also evaluates to 0 

因此,將整個表達式包裝成NULLIF(表達式0)意味着它作爲NULL出現。

null然後傳播通過計算的其餘部分,並導致整個表達式計算爲NULL。

如果您希望它爲0,則應將整個表達式包裝在ISNULL或COALESCE語句中,或者可以刪除NULLIF檢查,儘管它有點不清楚您實際嘗試實現的內容。

相關問題