如何将具有多个值的列加载到表中的单独行中

我有一个Excel工作表,如下所示:

+---------+----------------+ | ItemNum | Substitutes | +---------+----------------+ | ABCD | XXXX/YYYY/ZZZZ | | PQRS | AAAA/BBBB/CCCC | +---------+----------------+ 

我需要以下面的方式将它加载到MS Access或SQL Server中的表中:

 +---------+------------+ | ItemNum | Substitute | +---------+------------+ | ABCD | XXXX | | ABCD | YYYY | | ABCD | ZZZZ | | PQRS | AAAA | | PQRS | BBBB | | PQRS | CCCC | +---------+------------+ 

请build议一个方法来做到这一点。 我知道有一种方法可以使用Excel VBA来做到这一点。 但是我正在寻找macros的选项,其中的文件可以被加载到一个临时表,然后使用SQL可以获得所需的forms。

按原样导入数据,然后您可以使用此查询将其拆分:

 SELECT T1.ItemNum, T2.mySplits as Substitute FROM ( SELECT *, CAST('<X>'+replace(T.Substitutes,'/','</X><X>')+'</X>' as XML) as my_Xml FROM Table1 T ) T1 CROSS APPLY ( SELECT my_Data.D.value('.','varchar(50)') as mySplits FROM T1.my_Xml.nodes('X') as my_Data(D) ) T2 

这是一个Sql小提琴: http ://sqlfiddle.com/#!6/042da/2

你应该采取暂存表的方法。 因为你有这个标记为SQL Server和Access,这里有两个选项。

如果您知道代码总是相同的长度,然后将数据放在登台表中,并提取类似的东西:

 select ItemNum, substring(substitutes, 1, 4) as substitute from staging where substitutes is not null union all select ItemNum, substring(substitutes, 6, 4) as substitute from staging where substitutes like '%/%' union all select ItemNum, substring(substitutes, 10, 4) as substitute from staging where substitutes like '%/%/%' 

等等。 这是故意写在一个可以很容易地修改,以在MS Access中运行的方式。

第二个select是相似的,但在Excel中进行旋转。 使用数据 – >文本到列将数据拆分成单独的列。 然后,将它们加载到像substitute1这样的列的表格中,等等。 然后你需要一个像这样的查询:

 select ItemNum, substitute1 as substitute from staging where substitute1 is not null union all select ItemNum, substitute2 as substitute from staging where substitute2 is not null union all select ItemNum, substitute3 as substitute from staging where substitute3 is not null 

再一次,这个查询被有意写成与SQL Server和MS Access兼容。

你有一个上面的SQL查询用于导入,这应该是首选的方法。 如果要在工作表中尝试基于公式的解决scheme,请尝试使用此公式对。

拆分公式

D2:E2的公式是,

 =OFFSET($A$2, INT((ROW(1:1)-1)/3),0) =MID(OFFSET($A$2, INT((ROW(1:1)-1)/3), 1), MOD((ROW(1:1)-1)*5+1,15), 4) 

根据需要填写。 这可能是一次性解决scheme。