在 MS Access 中的查询表达式中出现语法错误(缺少运算符)

Posted

技术标签:

【中文标题】在 MS Access 中的查询表达式中出现语法错误(缺少运算符)【英文标题】:Getting syntax error (missing operator) in query expression in MS Access 【发布时间】:2019-07-18 10:29:27 【问题描述】:

我收到一条错误消息

查询表达式'r = row_number() over (partition by ACell order by ACell desc)'中的语法错误(缺少运算符)

在 Microsoft Access 中;我不知道为什么,但它适用于 Microsoft SQL Server。

我的查询:

select * 
from 
    (select *, r = row_number() over (partition by ACell order by ACell 
    desc) 
    from cellTB) a 
where 
    r <= 5;

谁能帮帮我?

示例数据:cellTB

=================
ACell  |   RNC
=================
1      |   1
-----------------
1      |   2
-----------------
1      |   3
-----------------
1      |   4 
-----------------
1      |   5
-----------------
1      |   6
-----------------
2      |   1
-----------------
2      |   2
-----------------
2      |   3
-----------------
2      |   4
-----------------
2      |   5
-----------------
2      |   6

我想从 MC Access 中的重复 ACell 中仅选择前 5 个。

【问题讨论】:

这是发送到 SQL Server 的传递查询吗?如果不是,则语法不正确,因为 Access 不支持窗口函数 我不知道如何在 Access 中使用这些命令 'r = row_number() over (partition by ACell order by ACell desc)'。 编辑问题以显示示例数据和所需的输出。您需要 Access 查询对象吗? @June7 我已经输入了我想要从这个查询中得到的示例数据和输出。 【参考方案1】:

你的代码是 T-SQL。例如,对于 Access SQL,您可以使用我之前多次发布的 RowNumber 函数:

Sequential row numbers

【讨论】:

【参考方案2】:

MS Access 不支持row_number()(只是切换到另一个数据库的众多原因之一)。一种做你想做的事的方法是使用相关子查询:

select c.* 
from cellTB as c
where (select count(*)
       from cellTb as c2
       where c2.Acell = c.Acell and
             c2.id <= c.id  -- this is the primary key column
      ) <= 5;

这假设您的表有一个主键,在本例中称为id

【讨论】:

以上是关于在 MS Access 中的查询表达式中出现语法错误(缺少运算符)的主要内容,如果未能解决你的问题,请参考以下文章

加入时更新 MS Access 语法错误

在连接上更新时出现MS Access语法错误

从 MS-Access 中联合选择查询中的 SQLite 语法错误

MS ACCESS 中的表级验证表达式中的语法错误

插入查询中发生语法错误(MS Access)

MySQL 语法错误 1064 与 MS Access 中的联合查询