从表中选择与其他2个表相关的子字符串

时间:2016-06-29 17:19:30

标签: sql access

以下是表格及其关系:

Tables

我想从与Repairs.DateOut最近的条目相关联的字符串InspectionDetails.Comments中获取一个数字,并将其插入Scopes中的每个记录的Scopes.CurrentUses中。我只想在InspectionDetails.Item = 1时获取这些字符。字符串将被格式化为“Total uses = 0000”,其中数字是可变长度(例如,1,20,1295等)。

SELECT
  s1.ScopeName,
  r1.DateOut,
  i1.Comment
FROM Scopes s1
  INNER JOIN Repairs r1 ON s1.ID = r1.AssetID
  INNER JOIN InspectionDetails r1 ON r1.ID = i1.RepairID
  INNER JOIN (SELECT MAX(r1.DateOut) AS DateOut
    FROM Scopes s
      INNER JOIN
      Repairs r ON s.ID = r.AssetID
      INNER JOIN
      InspectionDetails i ON r.ID = i.RepairID
    GROUP BY s.ID) i2 ON i1.ID = i2.ID

我认为我已经四分之一了,但是我遇到了语法错误而且仍然没有想出如何找到并将数据放入我想要的字段中。当输入修复数据的表单被保存或导航时,它会发生这种情况。

Repairs Form

我还附上了空白表格的图片。当子表单保存在TAB上时,保存按钮保存主表单。

1 个答案:

答案 0 :(得分:0)

您尚未在i2的子查询中指定ID。这肯定是一个问题,但不是单一问题:)显然,您不需要Repairs表,因为您在子查询中引用它。我只看到SELECT列表中的聚合字段。

为了查询的简洁性和可读性,您可以单独编写和保存子查询。然后在主查询中将它们添加为表格并执行必要的连接等。

E.g。根据您的情况,创建一个名为_LatestRepair的查询,如下所示:

SELECT s.ID AS ScopeId, r.ID AS RepairID, MAX(r1.DateOut) AS DateOut
FROM Scopes s
  INNER JOIN Repairs r ON s.ID = r.AssetID
GROUP BY s.ID, r.ID

然后将此_LatestRepair查询作为表添加到主查询中,如下所示:

SELECT s1.ScopeName, r1.DateOut, i1.Comments
FROM (_LatestRepair r1 INNER JOIN Scopes s1 ON s1.ID = r1.ScopeId)        
    INNER JOIN InspectionDetails i1 ON r1.RepairId = i1.RepairID

<强>更新

以下是您如何解析评论字段中的数字:

SELECT s1.ScopeName, r1.DateOut, i1.Comments,
    InStr([I1].[Comments],"=") AS Expr1, 
    IIf([Expr1]>0,Val(Right([i1].[Comments],Len([i1].[comments])-[expr1]))) AS Expr2
FROM (_LatestRepair r1 INNER JOIN Scopes s1 ON s1.ID = r1.ScopeId)        
    INNER JOIN InspectionDetails i1 ON r1.RepairId = i1.RepairID