一尘不染

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

sql

我正在使用以下语句

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

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

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

有人知道会发生什么吗?

编辑以澄清 -我目前仅在Access 2003中进行测试,最终的语句将通过Excel前端通过ADO进行参数化查询。


阅读 111

收藏
2021-05-05

共1个答案

一尘不染

这是topAccess中指令的一个已知效果,但不是很广为人知。

top指令不会返回最重要的n项目,因为很容易让人相信。相反,它至少返回n由结果的顺序确定的不同项目。

在大多数情况下是相同的,但是在您的示例中,第5到第8项具有相同的订购值,所有这些都包括在内。它返回前五个项目,然后返回所有与第五个项目具有相同订购值的项目。

如果不对表进行任何排序,则将考虑所有字段,因此,如果结果中有唯一字段,查询将始终返回五项。当然,如果订购中包含唯一字段,则同样如此。

SQL的其他方言的行为可能有所不同。例如,top仅在T-SQL(SQL Server)中的伪指令永远不会返回多于n项。然而,通过指定的条款with tiesorder by一起top,人们可以观察到相同的行为在Access中。

2021-05-05