各位大侠,请帮忙!
我有一表单:
ID CODE1 CODE2
1 AA AA BB CC
我如何写SQL语句可以把表单变成:
ID CODE1 CODE2
1 AA AA
2 AA BB
3 AA CC
谢谢各位!
------解决方案--------------------
--> 测试数据:[数据库]
if object_id('[数据库]') is not null drop table [数据库]
create table [数据库](
[编号] int,
[字段1] varchar(8),
[字段2] varchar(11)
)
insert [数据库]
select 1,'AA
------解决方案--------------------
BB
------解决方案--------------------
CC','888
------解决方案--------------------
999
------解决方案--------------------
666' union all
select 2,'AA
------解决方案--------------------
BB
------解决方案--------------------
CC','111
------解决方案--------------------
222
------解决方案--------------------
333' union all
select 3,'AA
------解决方案--------------------
BB
------解决方案--------------------
CC','444
------解决方案--------------------
555
------解决方案--------------------
666'
with T as
(
select [编号],charindex('
------解决方案--------------------
','
------解决方案--------------------
'+[字段1])col1a,
charindex('
------解决方案--------------------
',[字段1]+'
------解决方案--------------------
')+1 col1b,
charindex('
------解决方案--------------------
','
------解决方案--------------------
'+[字段2]) col2a,
charindex('
------解决方案--------------------
',[字段2]+'
------解决方案--------------------
')+1 col2b
from [数据库]
union all
select a.编号,b.col1b,charindex('
------解决方案--------------------
',[字段1]+'
------解决方案--------------------
',b.col1b)+1,
b.col2b,charindex('
------解决方案--------------------
',[字段2]+'
------解决方案--------------------
',b.col2b)+1
from [数据库] a join T b on a.编号=b.编号
where charindex('
------解决方案--------------------
',[字段1]+'
------解决方案--------------------
',b.col1b)>0
or charindex('
------解决方案--------------------
',[字段2]+'
------解决方案--------------------
',b.col2b)>0
)
select
a.编号,[字段1]=substring(a.[字段1]+'
------解决方案--------------------
',b.col1a,b.col1b - b.col1a - 1),
[字段2]=substring(a.[字段2]+'
------解决方案--------------------
',b.col2a,b.col2b - b.col2a - 1) into #test
from [数据库] a join T b on a.编号=b.编号
order by 1
declare @str varchar(2000)
set @str=''
select
@str=@str+','+[字段1]+'=max(case when [字段1]='
+quotename([字段1],'''')+' then [字段2] else 0 end)'
from
#test
group by
[字段1]
exec('select 编号'+@str+' from #test group by 编号')
/*
编号 AA BB CC
-------------------------
1 888 999 666
2 111 222 333
3 444 555 666
*/
--一个类似的例子