2015-02-05 51 views
0

每個人 - 我可以使用你的幫助。SQL案例平均公式輸出問題

我有一個SQL,我正在檢查一列,看看是否有金額。如果不是,我希望它輸出NULL。如果是這樣,我希望它計算一個平均值。我正在使用這個case語句,並且NULL語句工作正常,但是我的平均語句只是吐出1或0.我一直在搜索和測試幾個小時,但沒有運氣。

CASE 
WHEN SUM(z.[SumTarget$]) = 0 THEN NULL 
ELSE (1-(SUM(z.[SumBackorder])+SUM(z.[SumStockedOut]))/SUM(z.[CountofNo])) 
END [SumAvPerc] 

我已經被註釋掉線3,用這個代替,以確保數字是正確的進入公式,到目前爲止,一切正常檢查字符串中的每個字段。

--ELSE SUM(z.[SumStockedOut]) 

以下是字段和輸出的示例。 **我無法發佈圖片,因爲我需要更多的聲望值:(**

+0

您可以添加一個鏈接到圖片,有人可以將其添加爲你(但文字會更好)我猜一個數據類型(。所有?)的列是一個整數或一些描述,並且您正在使用對整數執行整數除法的RDBMS,例如SQL Server ......但是我只是猜測。你的數據類型是什麼?你使用的是什麼RDBMS?你能提供一個能證明你的問題的最小例子嗎? – Ben 2015-02-05 21:11:08

+0

是整數數學與十進制數學的問題。如果值是整數,則結果將被舍入。如果這些值是小數點開始,他們不會。例如:3/2 = 2而3/2.0 = 1.5我相信這與系統如何解釋返回列的數據類型有關。由於所涉及的所有值都是整數,因此它假定整數返回(不是十進制) – xQbert 2015-02-05 21:11:45

回答

2

SQL Server只不上intgers整數除法,所以您應將值轉換成非整數。

我經常做此用* 1.0,是這樣的:

(CASE WHEN SUM(z.[SumTarget$]) <> 0 
     THEN (1-(SUM(z.[SumBackorder])+SUM(z.[SumStockedOut]))/SUM(1.0 * z.[CountofNo])) 
END) as [SumAvPerc] 
+0

戈登 - 你是炸彈!它的作品謝謝! – SkottyP 2015-02-05 21:45:21