我的表格包含
等列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
答案 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>