我想使用select语句从3661记录表中获得10%。但我得到了367条记录作为回报,但我只想要366条记录;但是当我提出50%时,我希望获得1831条记录,而不是1830条记录。这是我使用的声明:
SELECT top 10 percent *
FROM table_a
答案 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添加了它,因为人们询问/抱怨这种行为。