0

我有一个 sql 查询(SQL server 2005),它正在创建一个 var 并做一些数学运算。当票数为 0 或 250000 时,数学有效,但当票数为任何其他值时,它不会创建小数点。(它读取 0。)这是查询 -

SELECT ticketCount, ((250000 - ticketCount) / 250000) * 100 AS percentSold 
FROM raffleTickets

DB 中的哪里ticketCount还有多少 250000 的票要出售。如果ticketCount是 250000,percentsold则为 0,这是正确的。如果ticketCount为0,percentSold则为100,这是正确的。对于所有其他值,percentSold返回 0。

请帮忙!谢谢。

4

3 回答 3

1

SQL Server 进行整数除法(这因数据库而异)。

您可以通过在常量后面加上小数点来轻松解决此问题:

SELECT ticketCount, ((250000.0 - ticketCount) / 250000.0) * 100.0 AS percentSold
FROM raffleTickets;

如果你想要整数部分,那么你可以cast()将结果返回一个整数。或者,您可以使用该str()函数将 的值转换为percentSold具有适当小数点数的字符串。

于 2013-10-17T22:39:42.213 回答
0

你的公式是正确的,

PercentSold = (TotalTickets - TicketsRemaining) / TotalTickets

但是上述函数的域和范围是什么?您的数字都表示为整数,但您可能希望使用 Real 进行计算。

PercentSold = ( ( TotalTickets - TicketsRemaining )*100.0) / (TotalTickets)

这会强制在 Real 中进行计算。知道如何在特定类型(即域)中声明变量和计算的语言可以使这一点更清晰、更明显。

想要以一定精度表示实数意味着您想要执行输出格式化。SqlServer 必须有一种方法来指定 Real Domain 中数字的输出格式。我听从SqlZoo.net对格式化的回答。

于 2013-10-17T22:41:38.127 回答
0

您唯一需要做的就是在公式中加上正负 0.0。

SELECT ticketCount, ((250000 - ticketCount - 0.0) / 250000) * 100 AS percentSold 
FROM raffleTickets
于 2020-11-11T06:12:28.227 回答