我有这两个表:
组:
+----+-------+------+
| ID | Title | Info |
+----+-------+------+
| 1 | Red | |
| 2 | Blue | |
| 3 | Green | |
+----+-------+------+
联系人:
+----+-------+----------------+
| ID | Name | Contact |
+----+-------+----------------+
| 1 | Joe | joe@test.com |
| 3 | Billy | billy@test.com |
| 3 | Sally | sally@test.com |
+----+-------+----------------+
我正在尝试根据ID进行匹配,并将所有数据从“联系人”移至“组”中的“信息”字段,这样只有一个表,而每个联系人都没有重复的记录。
+----+-------+----------------------------------------------+
| ID | Title | Info |
+----+-------+----------------------------------------------+
| 1 | Red | Joe: joe@test.com |
| 2 | Blue | |
| 3 | Green | Billy: billy@test.com, Sally: sally@test.com |
+----+-------+----------------------------------------------+
我是否试图通过使用SQL来超越界限?我不知道如何使用SQL将多个字段聚合到一个字段中。我正在使用MS Access,所以也许我应该在导出数据之前考虑使用VBA执行此操作。
编辑:不是Microsoft Access condense multiple lines in a table的重复项 我将多个字段压缩为一个字段,而不仅仅是将一个字段压缩为一个字段。
答案 0 :(得分:2)
您不能仅凭SQL做到这一点。您需要一个VBA功能。我下面显示的功能使用DAO库。确保具有对相应DLL(Microsoft DAO 3.6对象库)的引用。
将此代码添加到模块中:
Public Function JoinRecords(dataSource As String, Optional delimiter As String = ";", _
Optional columns As Long = 1) As String
Dim db As DAO.Database, rs As DAO.Recordset, s As String, col As Long
Set db = CurrentDb
Set rs = db.OpenRecordset(dataSource, dbOpenForwardOnly)
Do Until rs.EOF
For col = 0 To columns - 1
If s = "" Then
s = Nz(rs(col))
Else
s = s & delimiter & Nz(rs(col))
End If
Next col
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
JoinRecords = s
End Function
然后您可以运行此查询
UPDATE Groups
SET Info = JoinRecords("SELECT Name & ': ' & Contact FROM Contacts WHERE ID=" & ID, ", ")