SQL 服务器不返回小数位数



我正在尝试获取数据历史记录中值的平均递归率。为了完成此操作,我正在运行查询:

SELECT ROUND(COUNT(*)/COUNT(DISTINCT ChairID),10) FROM Chair WHERE xyz= 1

查询返回 1,但应返回 1.0500000000。

运行

SELECT COUNT(*) FROM Chair WHERE xyz = 1

返回 21

和跑步

SELECT COUNT(DISTINCT ChairID) FROM Chair WHERE xyz=1

返回 20。

因此,第一个查询应返回 1.05。

我认为问题在于服务器返回数据的格式。我正在使用带有本地数据库的Visual Studio。有什么建议可以解决这个问题吗?

这是因为COUNT()返回一个整数值。使其非整数的一个技巧是乘以 1.0 .

SELECT ROUND( COUNT(*) / (COUNT(DISTINCT ChairID) * 1.0), 10)
FROM Chair 
WHERE xyz = 1

您正在执行整数除法,这就是为什么获得整数作为结果的原因。将其中一个值转换为十进制以获得十进制结果。

SELECT CAST( COUNT(*) AS DECIMAL(20))  / COUNT(DISTINCT ChairID) 
FROM Chair 
WHERE xyz= 1

还可以使用 CAST 进行转换。

COUNT()始终返回一个整数值,因为它表示行数。在 SQL Server 中使用整数进行数学运算时,结果始终是一个整数(总和、休息、乘法和除法(。在执行除法后转换值不会产生差异。应将除法的任何部分转换为使用小数的数据类型,如 DECIMALFLOAT

您可以写CONVERT(DECIMAL(8,2), COUNT(*)) / COUNT(DISTINCT ChairID)或者,作为一种技巧,您可以将任一值乘以 1.0(这是双精度(,结果将被视为双COUNT(*) * 1.0 / COUNT(DISTINCT ChairID)

最新更新