2

我对一个我不理解的 SQL 查询有疑问:我正在使用带有剃刀语法的 WebMatrix。我想查询我的股票表,并以百分比的形式查找我的主要推动者中有多少股票。

在代码块中,我有:

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但是,当我输出它时,我得到了 0.00%@ofpc.ToString("P2")

我显然在某个地方错了......

4

1 回答 1

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变量成为浮点数,并且除法将是浮点除法。

于 2013-01-14T23:05:48.410 回答