访问转换多值字段table

Access convert multi-valued field table

我已经接管了一个数据库,该数据库具有 table 和多值字段,例如

我正在尝试将其转换为单值字段table,例如

两个 table 中的数字只是一个 ID,指的是一个名叫 Contact_ID 的人。

我已经尝试在使用交叉表查询的 Access 和使用转置的 Excel 中执行此操作,但是我无法生成一个新的 table,其中包含多个相同 Contact_ID 的示例一列和第二列的唯一关键字。

感谢任何有关执行此操作的最佳方法的建议。

对于未知数量的逗号分隔字符串,使用记录集迭代 table 可能是最简单的方法,使用 Split 函数分隔项目,并填充另一个记录集,例如:

Function ConvertTable()
    Dim strOldTable As String: strOldTable = "Table1"
    Dim strNewTable As String: strNewTable = strOldTable & "_new"

    Dim dbs As DAO.Database
    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
    Dim lngCID As Long
    Dim itm

    Set dbs = CurrentDb

    DoCmd.CopyObject , strNewTable, acTablem, strOldTable
    dbs.Execute "delete from [" & strNewTable & "]"

    Set rst1 = dbs.OpenRecordset(strOldTable)
    Set rst2 = dbs.OpenRecordset(strNewTable)
    If Not rst1.EOF Then
        rst1.MoveFirst
        Do Until rst1.EOF
            lngCID = rst1!Contact_ID
            For Each itm In Split(rst1!Field1, ",")
                If Trim(itm) <> "*" Then
                    rst2.AddNew
                    rst2!Contact_ID = lngCID
                    rst2!Field1 = Trim(itm)
                    rst2.Update
                End If
            Next itm
            rst1.MoveNext
        Loop
    End If
    rst1.Close
    rst2.Close
    Set rst1 = Nothing
    Set rst2 = Nothing
    Set dbs = Nothing
End Function

多值字段中的值将来自数据库中的 table。

对于 return 您需要将 .Value 添加到您的查询字段的单个项目。

例如,

如果 Table1 包含 ID 作为自动编号和 MyLookUpItems 作为单独的项目。

| MyLookUpID | MyLookUpField |
|------------|---------------|
| 1          | Alcohol       |
| 2          | Smoking       |
| 3          | diet          |
| 4          | Nutrition     |

Table2 包含显示多个值的 MyMultiValueField

| MyMultiValueField |
|-------------------|
| Smoking, diet     |
| Alcohol, diet     |

至 return 您将使用的单个项目:

SELECT MyMultiValueField.Value
FROM   Table2  

这会 return:

| MyMultiValueField.Value |
|-------------------------|
| diet                    |
| Smoking                 |
| Alcohol                 |
| diet                    |

然后你可以link回原来的ID:

SELECT MyLookUpID, MyLookUpField
FROM Table2 INNER JOIN Table1 ON Table2.MyMultiValueField.Value = Table1.MyLookUpID  

return:

| MyLookUpID | MyLookUpField |
|------------|---------------|
| 1          | Alcohol       |
| 2          | Smoking       |
| 3          | diet          |  

如果您不确定哪个是多值字段的来源,请在设计视图中打开 table 并查看该字段的 Lookup 选项卡。
Row Source 看起来像:

SELECT [Table1].[MyLookUpID], [Table1].[MyLookUpField] FROM Table1 ORDER BY [MyLookUpField]; 

显示 Table1 是来源。

编辑:
现在,写完所有这些....只要看看table的设计,行源中的table是 您在问题中寻找的单值字段 table。