访问:合并相似的记录
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】:你需要类似mysql中group_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 时引用它。以上是关于访问:合并相似的记录的主要内容,如果未能解决你的问题,请参考以下文章