这与早期的stackoverflow问题一致:Store multiple values in one database field in Access (hear me out)
我有一个联系人数据库,其联结表ContactType具有ContactTypeID(PK),ContactID(FK)和TypeID(FK)。
问题是,我从Excel导入数据。以下是为此设置Excel的最佳方法吗?
在Excel中,每个联系人都有一行,不同类型代码有几列(即每行有10列可用于类型代码)。 在Access中创建一个Union Query,它将获取每一行中的所有类型代码,并为每个联系人创建一个包含一个或多个记录的Junction表,每个记录由联系人和类型组成。
有没有更好的方法为此数据输入设置Excel?看起来很尴尬,虽然我之前已经做过它并且有效。
答案 0 :(得分:0)
Access Union查询以及SQL的文本都有限制。因此,如果您的数据很大,这种方法可能无法很好地扩展。
您可以执行的一种策略是运行Excel宏来遍历每一行,并将每一行转置到同一列中,以创建多对多Junction表导入。
Sub NormalizeData()
currlastrow = Sheets(1).UsedRange.Rows.Count
For i = 1 To currlastrow
newlastrow = Sheets(2).Range("A1").CurrentRegion.Rows.Count
'COPY/PASTE REPEATING CONTACT NAME
Sheets(2).Range("A" & newlastrow + 1 & ":A" & newlastrow + 10) = Sheets(1).Range("A" & i)
'COPYING DISTINCT TYPE CODES
Sheets(1).Range("B" & i & ":K" & i).Copy
'TRANSPOSING DISTINCT TYPE CODE
Sheets(2).Range("B" & newlastrow + 1).PasteSpecial Transpose:=True
MsgBox newlastrow
Next i
End Sub
可能涉及一些空行清理。但实质上,这是将数据从宽格式转换为长格式,最终结果为标准化的m:m表格。
广泛的格式:
CONTACT | TYPE1 | TYPE 2 | TYPE 3 | TYPE 4 | TYPE 5 ...
Anna Java C++ SQL PHP Python
Bob VB Java C# C++ R
Charlie PHP Ruby Perl CSS VB
LONG FORMAT:
Contact | TYPE
Anna Java
Anna C++
Anna SQL
Anna PHP
Anna Python
Bob VB
Bob Java
Bob C#
Bob C++
Bob R
Charlie PHP
Charlie Ruby
Charlie Perl
Charlie CSS
Charlie VB