我有一个表,其中的列如下
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我在列;#WR_1;#WR_2;#WR_3;#WR_4;#中找到CR中最大的字符串
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发布于 2014-02-19 17:13:29
因此,这不是一个非常好的解决方案,但正如您所要求的那样:
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 )即可。
https://stackoverflow.com/questions/21886535
复制相似问题