2012-10-17 107 views
2

我每月从Excel表格获取数据,需要将数据导入到Access表格中,与Excel表格相同。然后,我需要的Access表(输入表)转变成正常访问表(输出表)...将表格转换为正常表格

请提供建议

  1. 如何在访问..since创建一个动态输入表新列可以在Excel表格中添加或删除(例如:201211)
  2. 如何将输入表转换为访问中的输出表。

输入表:(列名:产品|地点| 201209 | 201210)

Product | Location | 201209 | 201210 

X  | DK  | 10  | 12 
y  | DK  | 10  | 12  

输出表:

Product | Location | Date | Quantity 

X  | DK  |201209 | 10 
X  | DK  |201209 | 12 
Y  | DK  |201210 | 10 
Y  | DK  |201210 | 12 

我的输入表中包含更多的列(如:201208,2012209,201210 ....... 201402)

回答

1

你可以从这样的查询得到你想要的输出:

Select Product, Location, '201209' as [Date], Table.[201209] as Quantity from Table 
UNION 
Select Product, Location, '201210' as [Date], Table.[201210] as Quantity from Table 

你提到你的列名可以改变。你可以通过创建一个查看TableDef的VBA子例程来解决这个问题,然后为所有列创建一个SQL查询,然后将记录插入到表中。

+0

+1同时考虑'UNION ALL'可能会更快。只是'UNION'对避免重复行很有用,但我怀疑这适用于此。 – HansUp

+0

@HansUp是的,UNION ALL会更快,但如果它是一张小桌子或不经常运行,它可能没有什么大不了。如果查询将用于INSERT命令到表中,则可能必须更改列标题,因为“Date”是Access中的保留字,应予以避免。 – KFleschner

+1

默认为'UNION ALL'。当您想清除重复的行时,只选择'UNION'。不要浪费时间在心理计算上“这种情况只有少量的行,所以UNION ALL的性能好处不太可能被注意到”。当它返回你不想要的重复行时,'UNION ALL'只会是错误的选择。 – HansUp