2

我想使用 select 语句从 3661 记录表中获取 10%。但是我得到了 367 条记录,但我只想要 366 条记录;但是当我投入 50% 时,我想获得 1831 条记录,而不是 1830 条记录。这是我使用的声明:

SELECT top 10 percent *
FROM table_a
4

2 回答 2

9

不幸的是,这就是该TOP x PERCENT子句的工作方式(突出显示相关部分):

百分

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

如果您想要不同的舍入方案,则必须自己进行计算:

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

这将使用整数除法,它会截断小数部分,即向下舍入。

由于您希望 3661 的 50% 产生 1831,我猜您想要“四舍五入”,您可以使用以下ROUND函数获得:

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

请注意,要强制进行浮点除法而不是整数除法10.0,则需要代替。10

于 2013-02-07T16:05:21.877 回答
0

以下是 MSDN Page for SQL Server 2012 TOP PERCENT 参数的描述:

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

但是,TOP 页面的 SQL Server 2005 版本不包括关于小数值被四舍五入的第二句。我会假设行为是相同的(部分基于你的轶事证据),MSDN 添加它是因为人们询问/抱怨这种行为。

于 2013-02-07T16:09:30.960 回答