Sql Access:表达式太复杂,无法计算

Sql Access:表达式太复杂,无法计算,sql,ms-access-2007,Sql,Ms Access 2007,我试图在周末之前从数据库中整理出值。我在7个数据库中的6个数据库上使用的脚本函数(它们的构造完全相同)。第七个数据库不起作用。我得到的表达式太复杂了。有人帮我弄清楚原因吗 这是我的密码: SELECT UPC_Test.Type, UPC_Test.[Model No], UPC_Test.[Model Desc], UPC_Test.[Serial No], Format(DateValue([UPC_Test].[Te

我试图在周末之前从数据库中整理出值。我在7个数据库中的6个数据库上使用的脚本函数(它们的构造完全相同)。第七个数据库不起作用。我得到的表达式太复杂了。有人帮我弄清楚原因吗

这是我的密码:

 SELECT UPC_Test.Type, 
        UPC_Test.[Model No], 
        UPC_Test.[Model Desc], 
        UPC_Test.[Serial No], 
        Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy") AS [Test Date], 
        UPC_Test.Parameter, 
        UPC_Test.[Failure Symptom], 
        UPC_Test.[Repair Action], 
        UPC_Test.[Factory Select], 
        UPC_Test.[Test Station]
FROM UPC_Test
GROUP BY UPC_Test.Type, 
         UPC_Test.[Model No], 
         UPC_Test.[Model Desc], 
         UPC_Test.[Serial No], 
         Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy"), 
         UPC_Test.Parameter, 
         UPC_Test.[Failure Symptom], 
         UPC_Test.[Repair Action], 
         UPC_Test.[Factory Select], 
         UPC_Test.[Test Station]
HAVING (((UPC_Test.Type)="Production") 
AND ((Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy"))=[Enter]) 
AND ((UPC_Test.[Failure Symptom])<>"") 
AND ((UPC_Test.[Repair Action])<>"") 
AND ((UPC_Test.[Test Station])="UPC RF Test"))
ORDER BY Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy");
选择UPC\U测试类型,
UPC_测试。[型号编号],
UPC_测试。[模型描述],
UPC_测试。[序列号],
格式(日期值([UPC_测试].[Test Date]+7-工作日([UPC_测试].[Test Date],0)),“m/d/yyyy”)为[测试日期],
UPC_测试参数,
UPC_测试。[故障症状],
UPC_测试[维修行动],
UPC_测试。[工厂选择],
UPC_测试。[测试站]
来自UPC_测试
按UPC_测试类型分组,
UPC_测试。[型号编号],
UPC_测试。[模型描述],
UPC_测试。[序列号],
格式(日期值([UPC_测试][测试日期]+7个工作日([UPC_测试][测试日期],0)),“m/d/yyyy”),
UPC_测试参数,
UPC_测试。[故障症状],
UPC_测试[维修行动],
UPC_测试。[工厂选择],
UPC_测试。[测试站]
具有(((UPC_测试类型)=“生产”)
和((格式(DateValue([UPC_测试].[Test Date]+7个工作日([UPC_测试].[Test Date],0)),“m/d/yyyy”)=[Enter])
和((UPC_测试[故障症状])“”)
和((UPC_测试[修复操作])“”)
和((UPC_测试。[测试站]=“UPC射频测试”))
按格式排序(日期值([UPC_测试].[Test Date]+7个工作日([UPC_测试].[Test Date],0)),“m/d/yyyy”);

当选择行中有聚合列(如sum、count)时,将使用group by子句。我看不出您有任何-这用于限制返回的行

因此,您可以去掉GROUPBY(它使用聚合列整理查询),并将having转换为where子句

在字段名中使用空格被认为是非常糟糕的做法,并且会多次返回,这需要更改数据库模式

我已在中添加了查询更改(未测试,我没有访问权限)

选择UPC\U测试类型,
UPC_测试。[型号编号],
UPC_测试。[模型描述],
UPC_测试。[序列号],
格式(日期值([UPC_测试].[Test Date]+7-工作日([UPC_测试].[Test Date],0)),“m/d/yyyy”)为[测试日期],
UPC_测试参数,
UPC_测试。[故障症状],
UPC_测试[维修行动],
UPC_测试。[工厂选择],
UPC_测试。[测试站]
来自UPC_测试
式中(((UPC_测试类型)=“生产”)
和((格式(DateValue([UPC_测试].[Test Date]+7个工作日([UPC_测试].[TestDate],0)),“m/d/yyyy”)=[Enter])
和((UPC_测试[故障症状])“”)
和((UPC_测试[修复操作])“”)
和((UPC_测试。[测试站]=“UPC射频测试”))
按格式排序(日期值([UPC_-Test].[Test Date]+7个工作日([UPC_-Test].[TestDate],0)),“m/d/yyyy”);

尝试减少查询和返回的字段,以便消除不会导致任何问题的部分查询和字段。如果你能分辨出不是什么导致了错误,那么你就更接近于知道是什么导致了错误

我会仔细查看计算字段和限制,因为可能是一段错误数据导致它未定义(比如将2013年2月30日格式化为日期)


还可以尝试使用第7个数据库中的数据子集,以跟踪是否存在一些错误数据。制作数据库的副本,确保发生错误。删除前一半的记录,看看它是否仍然存在。如果没有,请获取另一份副本,并仅使用数据的后半部分进行尝试。如果其中一半失败,而不是另一半,则很可能是数据,因此再次开始删除一半以跟踪它

此脚本在除此之外的所有其他数据库上都能完美地工作。结构上没有差异(相同的标题),查询被复制粘贴,并对源进行了更正。我不明白为什么这是7个数据库中唯一出现错误的数据库。您建议我更改的所有内容都返回了语法错误。第七个数据库中的数据有什么不同?特别是,由于您正在对某些字段进行格式化和计算,是否存在计算可能失败或未定义的地方?
   SELECT UPC_Test.Type, 
    UPC_Test.[Model No], 
    UPC_Test.[Model Desc], 
    UPC_Test.[Serial No], 
    Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy") AS [Test Date], 
    UPC_Test.Parameter, 
    UPC_Test.[Failure Symptom], 
    UPC_Test.[Repair Action], 
    UPC_Test.[Factory Select], 
    UPC_Test.[Test Station]
 FROM UPC_Test
     WHERE (((UPC_Test.Type)="Production") 
     AND ((Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[TestDate],0)),"m/d/yyyy"))=[Enter]) 
     AND ((UPC_Test.[Failure Symptom])<>"") 
     AND ((UPC_Test.[Repair Action])<>"") 
     AND ((UPC_Test.[Test Station])="UPC RF Test"))
     ORDER BY Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[TestDate],0)),"m/d/yyyy");