我在SQL Server 2008 R2数据库上有这个表结构:
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 :(得分:4)
这是因为你正在进行整数除法。你应该将其中一个操作数转换为float或decimal(取决于你正在进行的计算的精度和目的),使用类似的东西:
((CAST((a+ b + c) AS FLOAT) / 3) / 216647 * 10)
或可能:
(((a+ b + c) / 3.0) / 216647.0 * 10)
答案 1 :(得分:2)
您正在执行整数运算,因此您的结果将始终向下舍入到最接近的整数。由于您除以3,然后除以216647,根据数字输入,您的结果每次都会向下舍入为0。如果要获得非整数结果,则需要使用十进制(精确)或浮点(近似)数据类型和/或转换。
答案 2 :(得分:0)
declare @a int
declare @b int
declare @c int
set @a=65150
set @b=4921
set @c=1
select convert(float,((@a+@b+@c)/ 216647.0 * 10) )
答案 3 :(得分:0)
除以整数将产生一个整数(其余部分将被忽略)。因此,在分割时,使用小数或浮点数。 这应该适用于前面给出的浮点解决方案。用您的首选精度替换(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