2012-06-20 169 views
3

我有一個SQL Server 2008上此表的結構R2數據庫:這個SQL Server查詢劃分計算有什麼問題?

CREATE TABLE FormTest 
( 
clientid char(10), 
DateSelected date, 
A int, 
B int, 
C int 
) 

我填寫表格FormTest以下信息

clientid  DateSelected  A  B  C 
x1    2006-06-09  65150 4921 1 
x2    2006-05-05  155926 69092 1 
x3    2006-01-20  95603 156892 1 
x4    2006-01-20  30704 164741 1 
x4    2006-02-03  65150 174834 1 
x5    2006-04-28  59629 4921 1 
x6    2006-01-27  30704 162356 1 
x7    2006-06-30  65150 4921 1 
x8    2006-07-10  65150 4921 1 

最後,我運行這個SQL查詢:

SELECT clientid, (((a+ b + c)/3)/216647 * 10) AS Formula1 
    From FormTest 

但後來我得到了這些結果:

clientid  Formula1  
x1    0 
x2    0 
x3    0 
x4    0 
x4    0 
x5    0 
x6    0 
x7    0 
x8    0 

有人可以告訴我我做錯了什麼?

+0

SELECT(((CAST(65150 AS FLOAT)+ CAST(4921 AS FLOAT)+ CAST(1 AS FLOAT))/ 3)/ 216647 * 10)作爲公式1,儘管你可能只需將你的a + b + c的結果作爲浮點數並得到相同的結果。有一個bash,看看你如何去。 –

回答

4

這是因爲你在做整數除法。應該轉換操作數浮動的一個,或十進制(取決於你正在做的計算的精度和目的),使用類似:

((CAST((a+ b + c) AS FLOAT)/3)/216647 * 10) 

或可能:

(((a+ b + c)/3.0)/216647.0 * 10) 
2

您正在執行整數算術運算,因此您的結果將總是舍入到最接近的整數。既然你除以3,然後通過216647,基於數字輸入,你的結果每次都變成0。如果您想獲得非整數結果,則需要使用小數(精確)或浮點(近似)數據類型和/或強制轉換。

0

劃分整數將產生一個整數(其餘部分將被忽略)。因此,在劃分時,使用小數或浮點數。 除了之前給出的float解決方案之外,這應該起作用。與優選的精度代替(12,2):

SELECT clientid, (((
Cast(a as decimal(12,2)) + 
Cast(b as decimal(12,2)) + 
Cast(c as decimal(12,2)) 
)/3)/216647 * 10) AS Formula1 
FROM FormTest