use*_*125 2 sql-server sql-server-2005
我想使用select语句从3661记录表中获得10%.但我得到了367条记录作为回报,但我只想要366条记录; 但是当我提出50%时,我希望获得1831条记录,而不是1830条记录.这是我使用的声明:
SELECT top 10 percent *
FROM table_a
Run Code Online (Sandbox Code Playgroud)
不幸的是,这就是该TOP x PERCENT
条款的工作原理(相关部分突出显示):
百分
指示查询仅返回结果集中行的第一个表达式百分比.小数值向上舍入到下一个整数值.
如果您想要一个不同的舍入方案,您将不得不自己进行计算:
SELECT TOP (SELECT COUNT(*) / 10 FROM table_a) * FROM table_a
Run Code Online (Sandbox Code Playgroud)
这将使用整数除法,其截断小数部分,即,向下舍入.
既然你想要3661的50%产生1831,我想你想要" 圆半上升 ",你会得到这个ROUND
功能:
SELECT TOP (SELECT CONVERT(int, ROUND(COUNT(*) / 10.0, 0)) FROM table_a) * FROM table_a
Run Code Online (Sandbox Code Playgroud)
请注意,10.0
而不是10
强制浮点除法而不是整数除法.