在SQL Server中,选择最高百分比是否为1?

时间:2013-02-07 16:03:26

标签: sql-server sql-server-2005

我想使用select语句从3661记录表中获得10%。但我得到了367条记录作为回报,但我只想要366条记录;但是当我提出50%时,我希望获得1831条记录,而不是1830条记录。这是我使用的声明:

SELECT top 10 percent *
FROM table_a

2 个答案:

答案 0 :(得分:8)

不幸的是,这就是TOP x PERCENT clause的工作原理(相关部分突出显示):

  

PERCENT

     

表示查询仅返回结果集中行的第一个表达式百分比。 小数值向上舍入到下一个整数值。

如果您想要一个不同的舍入方案,您将不得不自己进行计算:

SELECT TOP (SELECT COUNT(*) / 10 FROM table_a) * FROM table_a

这将使用整数除法truncates the fractional part,即它向下舍入。

由于你希望3661的50%产生1831,我猜你想要“圆半上升”,你会得到ROUND function

SELECT TOP (SELECT CONVERT(int, ROUND(COUNT(*) / 10.0, 0)) FROM table_a) * FROM table_a

注意强制浮点除法而不是整数除法需要10.0而不是10

答案 1 :(得分:0)

以下是针对SQL Server 2012的TOP的MSDN页面的PERCENT参数的说明:

  

表示查询仅返回第一个表达式百分比   结果集中的行。分数值向上舍入到下一个   整数值。

然而,SQL Server 2005 version of the TOP page不包括关于小数值被舍入的第二句话。我认为行为是相同的(部分基于你的轶事证据),并且MSDN添加了它,因为人们询问/抱怨这种行为。