访问:合并相似的记录

Posted

技术标签:

【中文标题】访问:合并相似的记录【英文标题】:Access: Merging similar records 【发布时间】:2015-08-26 08:39:00 【问题描述】:

我有一个表,其中包含多个唯一 UnitNo 和 Dates 条目(有时不同的注释,因为它由不同的调查员填写)。我想将笔记列和调查员合并为一个笔记和调查列:

UnitNo    Date           Notes                 Investigator
----------------------------------------------------------------------------
232       13/08/15       No major issues       Andy Barney
232       13/08/15       Door Defect           Andy Barney
781       21/08/15       No defect found       John Adams
781       21/08/15       Door Defect           Andy Barney
xxx       xxxxxxxx       xxxxxxxxxxx           xxxxxxxxxx

我想基本上为具有相似 UnitNo 和 Date 的记录获取一条记录,然后将其他两个字段组合在一起,这样如果它相似就不会重复:

UnitNo    Date           Notes                 Investigator
----------------------------------------------------------------------------
232       13/08/15       No major issues       Andy Barney
                         Door Defect

781       21/08/15       No defect found       John Adams
                         Door Defect           Andy Barney

xxx       xxxxxxxx       xxxxxxxxxxx           xxxxxxxxxx

我在不同的地方检查了答案,我发现了这个代码Allen Browne 和Here。 但是,当我使用 ConcatRelated(xxx) 说未定义 sub.[xxx] 时收到错误消息。

编辑

这是我的第二部分代码:

公共函数 MergeEquinoxImport()

Dim SQL1 As String
Dim qdfNew1 As QueryDef
Dim db As Database

Set db = CurrentDb

SQL1 = "SELECT Sub.[UnitNo],Sub.[Date], ConcatRelated([Notes], [TblPractise], " & _
    "[Date]='" & Sub.[Date] & "' And [UnitNo]='" & Sub.[UnitNo] & "') " & _
    "FROM (SELECT q.[UnitNo],q.[Date], FROM TblPractise " & _
    "AS q Group BY q.[UnitNo],q.[Date],) AS Sub Order " & _
    "BY Sub.[UnitNo],Sub.[Date];"

If acbDoesObjExist("Query1", acQuery) Then
    DoCmd.DeleteObject acQuery, "Query1"
End If

With db
    Set qdfNew1 = .CreateQueryDef("Query1", SQL1)
End With

结束函数

【问题讨论】:

@HansUp 这与您在链接中回答的问题非常相似。你能帮我解决这个问题吗?当我想使用 ConcatRelated(xxx) 说 Sub.[xxx],值 Sub 未定义时,我基本上得到一个错误。 【参考方案1】:

你需要类似mysqlgroup_concat的函数。

在访问中我们没有像group_concat这样的功能:(

bt,我们可以通过以下代码实现:

  Select T.ColumnA
      , GetList("Select ColumnB From Table1 As T1 Where T1.ColumnA = " & [T].[ColumnA],"",", ") AS ColumnBItems
    From Table1 AS T
    Group By T.ColumnA;

请参考下面的 SO 问题。它包含完整的详细信息。 Microsoft Access condense multiple lines in a table

【讨论】:

感谢您的评论。我对您的回答有疑问:“选择 T.UnitNo, T.Date, GetList(Select Notes From TblPractise As T1 Where T1.UnitNo= " & T.[UnitNo] ","","") AS ColumnBItems From TblPractise AS T Group By T.UnitNo, T.Date;"但这给了我一个错误,说括号中的 T 未定义(变量未定义)。 @Kamran :我忘了添加链接以获取详细信息。我已经更新了它。请参考。 这似乎是我的问题的答案。但是,我的一些字段是备忘录的格式,它给了我“子查询'Notes'中无效的备忘录、OLE 或超链接对象”的错误,Notes 是我想要放在一起的一个【参考方案2】:

这应该在前端应用程序中完成,而不是使用 sql。如果你想这样做,我能想到的唯一方法是为每个 id 和每一列重置序列号,你需要检查是否 sno=1 然后显示该值,否则显示为空

【讨论】:

感谢您的评论。我相信这是可能的。目前我遇到的问题只是此代码采用“所有”我的注释字段中的值并显示可用于单个列的所有注释。但是,如果我对此进行排序,以便每次运行时过滤整个表以获取唯一的 UnitNo 并保存它,它将被修复。我的问题是,当我将 Sub 定义为我的数据源时,我可以在使用 Recordset 时引用它。

以上是关于访问:合并相似的记录的主要内容,如果未能解决你的问题,请参考以下文章

Ms access 合并多重访问文件表

通过合并相似的列来操作重复的行[重复]

如何从多个不同来源导入和合并相似(但不相等)的文本

如何使用合并的内存访问

C# N 路合并用于外部排序

python脚本实现访问日志合并