Sql Access:表达式太复杂,无法计算
我试图在周末之前从数据库中整理出值。我在7个数据库中的6个数据库上使用的脚本函数(它们的构造完全相同)。第七个数据库不起作用。我得到的表达式太复杂了。有人帮我弄清楚原因吗 这是我的密码: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
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");