我遇到一个我不理解的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,具体取决于我有变量instock
和topmovers
的方式。我想要一个百分比,而不是100%或0%!
如果我去@instock.ToString();
我得到862
如果我去@topmovers.ToString();
我得到965
根据我的数学,862/965是0.8932(89.32%)
但是,当我使用ofpc
@ofpc.ToString("P2")
时,我获得0.00%的结果
我显然在某处错了......
答案 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
变量成为浮点数,并且除法将是浮点除法。