在MS-Access中将多个字段压缩为单个列

时间:2015-07-31 14:40:16

标签: sql vba ms-access access-vba ms-access-2007

我正在尝试规范化使用多个列进行相同操作的数据库。例如,Street, Street2, ..., Street12。我目前的计划是创建一个单独的Street表,其中包含StreetmainID的列(加上此表的新ID字段),其中mainID是主要的主数据库的关键。 (Example)根据需要,每个mainID都可以链接到多个街道记录,从而可以删除主表中的街道列。

我打算通过子查询(根据this page)引用这个新表来简化我们的搜索表单。 (您可以想象,现在维护起来有些困难。)此结构的示例查询可能是SELECT name FROM mainDB WHERE fID IN (SELECT fID FROM idStreets WHERE street=[inputItem]);

问题是数据库已经有大约17000个条目;用手合理纠正太多了。我应该如何自动进行转换?

1 个答案:

答案 0 :(得分:2)

首先,要创建Streets表运行联合查询,然后将其输出到表:

SELECT mainID, Street1
FROM maintable;
UNION 
SELECT mainID, Street2
FROM maintable;
...
UNION
SELECT mainID, Street12
FROM maintable;

然后是生成表查询,然后添加自动编号。

SELECT * INTO Street FROM unionqry;

最后,您的子查询很可能是一个简单的连接:

SELECT name FROM mainDB 
WHERE fID IN 
   (SELECT fID FROM idStreets WHERE street=[inputItem]);

成为:

SELECT DISTINCT name FROM mainDB 
INNER JOIN Streets ON mainDB.fID = Streets.mainID
WHERE street=[inputItem]);