C# Sql Server不返回小数位数

C# Sql Server不返回小数位数,c#,sql,sql-server,visual-studio,C#,Sql,Sql Server,Visual Studio,我试图得到数据历史记录中某个值的平均发生率。 为了实现这一点,我正在运行查询: SELECT ROUND(COUNT(*)/COUNT(DISTINCT ChairID),10) 从椅子上 其中xyz=1 查询返回1,但应返回1.050000000 运行 选择计数(*) 从椅子上 其中xyz=1 返回21 和跑步 选择计数(不同的主席ID) 从椅子上 其中xyz=1 返回20 因此,第一个查询应该返回1.05 我认为问题在于服务器返回数据的格式。我正在使用VisualStudio和本地数据

我试图得到数据历史记录中某个值的平均发生率。 为了实现这一点,我正在运行查询:

SELECT ROUND(COUNT(*)/COUNT(DISTINCT ChairID),10)
从椅子上
其中xyz=1

查询返回1,但应返回1.050000000

运行

选择计数(*)
从椅子上
其中xyz=1

返回21

和跑步
选择计数(不同的主席ID)
从椅子上
其中xyz=1

返回20

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


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

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

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

这是因为
COUNT()
返回一个整数值。使其非int的一个技巧是乘以
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进行转换。

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

SELECT CAST( COUNT(*) AS DECIMAL(20))  / COUNT(DISTINCT ChairID) 
FROM Chair 
WHERE xyz= 1
也可以使用CAST进行转换。

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

您可以编写
CONVERT(十进制(8,2),COUNT(*)/COUNT(不同的ChairID)
,或者,作为一种技巧,您可以将任一值与
1.0
(这是一个双精度)相乘,结果将被视为双精度
COUNT(*)*1.0/COUNT(不同的ChairID)

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

您可以编写
CONVERT(十进制(8,2),COUNT(*)/COUNT(不同的ChairID)
或者,作为一种技巧,您可以将任一值与
1.0
(这是一个双精度)相乘,结果将被视为双精度
COUNT(*)*1.0/COUNT(不同的ChairID)
选择四舍五入((COUNT(*)*1.0)/COUNT(不同的ChairID),10)
??
选择舍入((计数(*)1.0)/计数(不同的主席ID),10)
??