无意冒犯(或尽可能少冒犯),但这是一种构建数据的可怕方式。你真的需要像这样重组它:
CustomerID MovieID HireDate
---------- ------- --------
1 0001 19/05/2006
1 0003 20/10/2003
1 0007 13/08/2003
...
2 0035 16/08/2012
2 0057 06/10/2012
...
如果您保留当前的数据结构,那么
你会发疯的,而且
其他任何人都不太可能接近这个问题。
编辑
您修改后的数据结构是一个非常小的改进,但它仍然对您不利。考虑到您在这里的另一个问题中,您实质上是在询问一种在进行查询时“即时”“修复”数据结构的方法。
好消息是您可以运行一些 VBA 代码一次将您的数据结构转换为可用的东西。首先创建您的新表,我将其命名为“HireHistoryV2”
ID - AutoNumber, Primary Key
CustomerID - Number(Long Integer), Indexed (duplicates OK)
MovieID - Text(4), Indexed (duplicates OK)
HireDate - Date/Time, Indexed (duplicates OK)
将数据复制到新表的 VBA 代码如下所示:
Function RestructureHistory()
Dim cdb As DAO.Database, rstIn As DAO.Recordset, rstOut As DAO.Recordset
Dim fld As DAO.Field, a() As String
Set cdb = CurrentDb
Set rstIn = cdb.OpenRecordset("HireHistory", dbOpenTable)
Set rstOut = cdb.OpenRecordset("HireHistoryV2", dbOpenTable)
Do While Not rstIn.EOF
For Each fld In rstIn.Fields
If fld.Name Like "Hire*" Then
If Not IsNull(fld.Value) Then
a = Split(fld.Value, " on ", -1, vbBinaryCompare)
rstOut.AddNew
rstOut!CustomerID = rstIn!CustomerID
rstOut!MovieID = a(0)
rstOut!HireDate = CDate(a(1))
rstOut.Update
End If
End If
Next
Set fld = Nothing
rstIn.MoveNext
Loop
rstOut.Close
Set rstOut = Nothing
rstIn.Close
Set rstIn = Nothing
Set cdb = Nothing
MsgBox "Done!"
End Function
注意:您似乎正在使用 dd/mm/yyyy 日期格式,因此请仔细检查日期转换以确保它们正确转换。