2016-06-29 48 views
-1

下面是表和它们之间的关系:我想摆脱与维修中的最新条目相关的字符串InspectionDetails.Comments一些从表中选择子与其他2个表

Tables

.DateOut并将其插入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上时,保存按钮保存主窗体。

回答

0

您还没有在i2的子查询中指定Id。这肯定是一个问题,不是唯一的问题:)显然你不需要Repairs表,因为你在子查询中引用它。我只看到SELECT列表中的聚合字段。

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

例如,鉴于您的情况创建一个名为_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 

UPDATE

这里是你如何解析注释字段中的数字:

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 
+0

有意义,先获得最近的修复,然后根据该评论查找评论。唯一的问题是我收到查询表达式's1.ID = r1.ScopeID INNER JOIN InspectionDetails i1 ON r1.RepairID = i1.RepairID'' –

+0

'语法错误(缺少运算符)'_LatestRepair'查询是否运行没有错误? –

+0

是的,尽管我列出了所有为每个范围完成的修复,而不是最近的修复。我在SQL中感到尴尬地生锈,它似乎每一个都很难与Access一起工作... –

相关问题