2014-01-09 44 views
0

在我的選擇列表中,我想返回一列顯示未命中約會的百分比。當客戶錯過約會時,來源列的持續時間包含「0」。所以我想總結一下「0」的例子,並按預定的總預約來劃分。TSQL - CAST AS PERCENT

CAST(SUM(CASE WHEN event_client_duration = 0 THEN 1 ELSE 0 END)/COUNT(event_key) AS FLOAT) 

這並不拋出一個錯誤,但它返回一個0值,除了在極少數情況下失約均超過50%,在這種情況下,返回1

SUM(CASE WHEN event_client_duration = 0 THEN 1 ELSE 0 END) -- that works 
COUNT(event_key) -- that also works, but together they bonk 

所以,我試圖將它轉換爲十進制,但這會導致算術溢出。

CAST(SUM(CASE WHEN e_cl_dur = 0 THEN 1 ELSE 0 END)/COUNT(e_key) AS DECIMAL(2,2)) 

我也嘗試使用百分比作爲數據類型。有任何想法嗎?

+0

如果您將'CAST'移到COUNT(event_key)'周圍而不是整個項目上,它應該可以工作。你遇到的問題是你有兩個整數被分割,在你投射之前已經完成四捨五入。通過將除數轉換爲浮點數,該分區也將返回一個浮點數。 –

+0

美女! SUM(CASE WHEN e_cl_dur = 0 THEN 1 ELSE 0 END)/ CAST(COUNT(e_key)AS FLOAT)謝謝Adam! – PowderSnorkel

+1

[如果我是你,我會使用DECIMAL而不是FLOAT](http://blogs.msdn.com/b/khen1234/archive/2005/05/13/417153.aspx)。 –

回答

0
SUM(CASE event_client_duration WHEN 0 THEN 1.0 ELSE 0.0 END)/COUNT(event_key)