从SQL分割结果时出错

时间:2013-01-14 23:00:47

标签: sql razor webmatrix

我遇到一个我不理解的SQL查询问题: 我正在使用带有剃刀语法的WebMatrix。 我想查询我的库存表,并查找我有多少顶级搬运工有库存,以百分比形式。

在代码bolock中,我有:

var topmovers = db.QueryValue("select COUNT(STOCKCODE) from dbo.STOCK_ITEMS where STOCK_CLASSIFICATION = 170") ?? 0;   

var instock = db.QueryValue("select COUNT(STOCKCODE) from dbo.STOCK_ITEMS where STOCK_CLASSIFICATION = 170 and TOTALSTOCK > 0") ?? 0;   

var ofpc = instock/topmovers;`

然后在身体里,我有

@ofpc.ToString("P2")

它返回0或100,具体取决于我有变量instocktopmovers的方式。我想要一个百分比,而不是100%或0%!

如果我去@instock.ToString();我得到862

如果我去@topmovers.ToString();我得到965

根据我的数学,862/965是0.8932(89.32%)

但是,当我使用ofpc

输出@ofpc.ToString("P2")时,我获得0.00%的结果

我显然在某处错了......

1 个答案:

答案 0 :(得分:3)

同样的问题发生在SQL Server中,它执行整数除法,因此:

select 1/2

始终返回0.

因此,您需要将其中一个值转换为浮点数。你能用这个表达式吗?

var ofpc = cast(instock as float)/topmovers;

或类似的东西?也许:

var ofpc = (instock*1.0)/topmovers

您还可以使数据库返回浮点值:

var topmovers = db.QueryValue("select cast(COUNT(STOCKCODE) as float) from dbo.STOCK_ITEMS where STOCK_CLASSIFICATION = 170") ?? 0;`

我所做的是将第一个计数转换为SQL中的浮点数。毫无疑问,您可以在应用程序级别执行此操作,但我对SQL更熟悉。这应该使topmovers变量成为浮点数,并且除法将是浮点除法。