Sql 在Access中将分隔的条目拆分为新行
所以有人给了我一个订单的电子表格,每个订单的唯一值是PO,给我电子表格的人是懒惰的,他们决定订单有多个PO,但相同的信息,他们只是用“/”分开。例如,我的桌子看起来像这样Sql 在Access中将分隔的条目拆分为新行,sql,ms-access,vba,delimiter,Sql,Ms Access,Vba,Delimiter,所以有人给了我一个订单的电子表格,每个订单的唯一值是PO,给我电子表格的人是懒惰的,他们决定订单有多个PO,但相同的信息,他们只是用“/”分开。例如,我的桌子看起来像这样 PO Vendor State 123456/234567 Bob KY 345678 Joe GA 123432/123456 Sue CA 234234 Mike CA 我希望做的是使用“/”符号作为分隔符来分隔PO,所
PO Vendor State
123456/234567 Bob KY
345678 Joe GA
123432/123456 Sue CA
234234 Mike CA
我希望做的是使用“/”符号作为分隔符来分隔PO,所以看起来像这样
PO Vendor State
123456 Bob KY
234567 Bob KY
345678 Joe GA
123432 Sue CA
123456 Sue CA
234234 Mike CA
现在,我一直在集思广益,想办法解决这个问题。最终,我希望访问这些数据。原始格式的数据在Excel中。我想做的是在Access中编写一个vba函数,可以与SQL语句结合使用来分隔这些值。我现在很挣扎,因为我不知道从哪里开始 在Excel中,尝试以下操作:
IF(ISERROR(FIND("/",A1,1))=TRUE,A1, Left(A1, 6))
在它旁边的单元格中,放置如下内容:
IF(ISERROR(FIND("/",A1,1))=TRUE,"", Right(A1, 6))
这将把你的采购订单分成两列。从那里,写一个循环,在适当的地方创建一个新记录。关于此:
1) 将源数据导入名为SourceData的新访问表
2) 创建新查询,直接进入SQL视图并添加以下代码:
SELECT * INTO ImportedData
FROM (
SELECT PO, Vendor, State
FROM SourceData
WHERE InStr(PO, '/') = 0
UNION ALL
SELECT Left(PO, InStr(PO, '/') - 1), Vendor, State
FROM SourceData
WHERE InStr(PO, '/') > 0
UNION ALL
SELECT Mid(PO, InStr(PO, '/') + 1), Vendor, State
FROM SourceData
WHERE InStr(PO, '/') > 0) AS CleanedUp;
这是Access术语中的“make table”查询(尽管是嵌套的联合查询);对于“append”查询,将顶部的两行改为
INSERT INTO ImportedData
SELECT * FROM (
(其余部分不变。)区别在于,重新运行make table查询将清除目标表中已有的内容,而append查询将添加到任何现有数据中
3) 运行查询。如果必须这样做,我会这样做
- 将原始数据导入名为[Expertable]的表中
- 使用“仅结构”选项将[TENTRABLE]复制到名为[ActualTable]的新表中
- 打开两个DAO记录集,
用于[Tentable]和rstIn
用于[ActualTable]rstOut
- 循环浏览
记录集rstIn
- 使用VBA
函数将“/”上的[PO]值拆分为一个数组Split()
数组项,我将使用对于每个
将记录写入[ActualTable]rstOut.AddNew