2014-02-19 55 views
0

我一個表中包含像如何在一列上訪問表使用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 

或Array

WR_1 
WR_2 
WR_3 
WR_4 
+0

什麼數據會填充列? –

+0

數據可以爲空,因爲我想在下拉列表中使用這些列名稱。 – vuyy1182

回答

0

所以這ISN」 T A很漂亮的解決方案,但它確實爲你問:

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

+0

我正在使用Access-VBA,我如何定義FUNCTION [dbo]。[fn_SplitString]。 – vuyy1182

+0

嗯肯定錯過了那個標籤,我不確定它是否可能。我將重寫答案,以便它不使用表值函數。 –

+0

@ swa1234已編輯答案以刪除表值函數。仍然不能100%確定它將在Access-VBA中工作 –