如何使用vba在访问表上的一列中拆分字符串值

时间:2014-02-19 16:31:07

标签: sql access-vba

我的表格包含

等列
Prefix    CR
g         ;#WR_1;#WR_2;#WR_3;#WR_4;# 
v         ;#WR_3;#WR_4;#
j         WR_2
m         WR_1
d         ;#WR_3;#WR_4;#   
f9        WR_3

我在 CR 列中找到最大字符串为;#WR_1;#WR_2; #WR_3;#WR_4;#使用

    select top 1 CR,Prefix from table1 order by len(CR) desc 

并返回

Prefix        CR
g             ;#WR_1;#WR_2;#WR_3;#WR_4;# 

我想将此字符串;#WR_1;#WR_2; #WR_3;#WR_4;#拆分为列名

Prefix  WR_1    WR_2   WR_3   WR_4

或作为数组

WR_1
WR_2
WR_3
WR_4

1 个答案:

答案 0 :(得分:0)

所以这不是一个非常漂亮的解决方案,但它可以按照你的要求行事:

create table #Blah(Prefix nvarchar(5), CR nvarchar(60))

insert into #Blah
values('g', ';#WR_1;#WR_2;#WR_3;#WR_4;#')
insert into #Blah
values('v', ';#WR_3;#WR_4;#')
insert into #Blah
values('j', 'WR_2')
insert into #Blah
values('m', 'WR_1')
insert into #Blah
values('d', ';#WR_3;#WR_4;#')
insert into #Blah
values('f9', 'WR_3')

SELECT Prefix, [WR_1], [WR_2], [WR_3], [WR_4]
FROM(
    SELECT Prefix, SUBSTRING(CR+';#', num, CHARINDEX(';#', CR+';#', num) - num) Item, convert(int,NULL) Col
    FROM #Blah 
        inner join Numbers on num <= LEN(REPLACE(CR,' ','|')) AND SUBSTRING(';#' + CR, num, LEN(REPLACE(';#',' ','|'))) = ';#'
    WHERE SUBSTRING(CR+';#', num, CHARINDEX(';#', CR+';#', num) - num) > ''
    ) q
PIVOT (
    MAX(Col) FOR Item IN ([WR_1], [WR_2], [WR_3], [WR_4])
) p

drop table #Blah

此查询使用名为Numbers的表格,该表格仅使用单个列Num,每个列的行数为1到10,000。

我不确定为什么将数据作为列标题在填充下拉列表时有用,将数据作为行获取,只需删除数据透视表并使用内部查询,别名q < / p>