2013-10-17 69 views
0

我有一個SQL查詢(SQL服務器2005年),這是創建一個變種和做一些數學。當票數爲0或250000時,數學運作,但當票數爲任何其他值時,不會創建小數點。 (它讀取0)下面是該查詢 -數學在SQL查詢不起作用

SELECT ticketCount, ((250000 - ticketCount)/250000) * 100 AS percentSold 
FROM raffleTickets 

ticketCount在DB是250000多票如何仍有待銷售。如果ticketCount是250000,則percentsold是0,這是正確的。如果ticketCount爲0,則percentSold爲100,這是正確的。對於所有其他值,percentSold正在返回0.

請幫忙!謝謝。

+5

我懷疑你遇到整數除法問題。作爲猜測,請嘗試爲每個數字附加'.0'。 –

+0

爲每個250000添加.0返回正確的百分比。現在,如何將它限制在一位小數位?我在查詢中還是在顯示中這樣做?這是驅動一個XML文件。顯示是: writer.WriteElementString(「percentsold」,myReader [「percentSold」]。ToString()); – user2697262

+1

writer.WriteElementString(「percentsold」,((decimal)myReader [「percentSold」])。ToString(「N1」)); –

回答

1

SQL Server執行整數除法(這在數據庫中有所不同)。

您可以輕鬆地在一個小數點的常量之後的解決這個問題:

SELECT ticketCount, ((250000.0 - ticketCount)/250000.0) * 100.0 AS percentSold 
FROM raffleTickets; 

如果你想的整數部分,那麼你就可以cast()結果返回一個整數。或者,您可以使用str()函數將percentSold的值轉換爲具有適當小數點數的字符串。

0

你的公式是正確的,

PercentSold = (TotalTickets - TicketsRemaining)/TotalTickets 

但是,什麼是上述函數的定義域和值域?你的數字全部用整數表示,但你可能想用Real來計算。

PercentSold = ((TotalTickets - TicketsRemaining)*100.0)/(TotalTickets) 

這會強制計算在Real中完成。知道如何在特定類型(即域)中聲明變量和計算的語言可以使這一點更清楚,更明顯。

想要以一定的精度表示實數意味着您要執行輸出格式化。 SqlServer必須有一種方法來指定真實域中數字的輸出格式。我遵循SqlZoo.net的格式設置。