使用TOP 5访问SQL返回超过5个结果?

Lun*_*tik 9 sql sorting ms-access

我正在使用以下声明

SELECT TOP 5 rootcause, COUNT(IIF(accountability="Team 1",1,0))
FROM  MOAQ
WHERE CDT=1
GROUP BY rootcause
Run Code Online (Sandbox Code Playgroud)

MOAQ另一个查询返回4个表中的大约20个字段,没什么特别的.这按预期工作,我得到5个结果.

如果我ORDER BY在条件字段上添加一个子句,虽然我开始得到8个结果.如果按第一个字段排序,则没有问题.

任何人都知道可能会发生什么?

编辑澄清 - 此时我只在Access 2003中进行测试,最终语句将通过ADO从Excel前端进行参数化查询.

Guf*_*ffa 30

这是topAccess中指令的已知效果,但它并不是很有名...

top指令不会返回顶部n项目,因为很容易让人相信.相反,它至少返回n由结果排序确定的不同项目.

在大多数情况下,它是相同的,但在您的示例中,第5到第8项具有相同的排序值,所有这些都包括在内.它返回前五项,但也返回与第五项具有相同排序值的所有项目.

如果您不对表应用任何排序,则会考虑所有字段,因此如果结果中有唯一字段,则查询将始终返回五个项.当然,如果排序中包含唯一字段,则相同.

SQL的其他方言可能表现不同.例如top,T-SQL(SQL Server)中的指令永远不会返回多个n项目.但是,通过指定子句with tiesorder by与之一起top,可以观察到与Access中相同的行为.

  • +1有趣!已知的效果是未知的 (2认同)