还是那个同学,让我帮忙把格式如下的数据集进行重组成以颜色为标志的信息,冒号前为数据项,后为数据值。
前盖,后盖:喷漆银
开关,收线,调速钮,吸口圈:喷漆银灰色
底座,出风板,大滚轮,大滚轮套圈:注塑黑
手柄, 锁紧块:喷漆银
首先,创建一个数据表T存放原始数据信息,并将其重组后的结果存放在数据表DT中。各表的粗略定义如下:
create database Test
delete from table1
create table T
( X varchar(254),
V varchar(100)
)
insert into T values('前盖,后盖,手柄, 锁紧块','喷漆银')
insert into T values('开关,收线,调速钮,吸口圈','喷漆银灰色')
insert into T values('底座,出风板,大滚轮,大滚轮套圈','注塑黑')
insert into T values('手柄, 锁紧块','喷漆银')
create table DT
( V varchar(100),
X varchar(254)
)
考虑到需要先获取所有的颜色(数据值)然后依据每种颜色在数据项中进行查找,因此决定使用游标的遍历功能来实现。具体的脚本如下:
declare @Value varchar(100)
declare @Xiang varchar(254)
declare @X varchar(154)
declare Q cursor
for select distinct V from T
open Q
fetch Q into @Value
while @@fetch_status=0
begin
select @Xiang=' '
insert into DT values(@Value,@Xiang)
declare P cursor
for select X from T where V=@Value
open P
fetch P into @Xiang
while @@fetch_status=0
begin
select @X=(select X from DT where V=@Value)
if @X<>' '
begin
update DT set X = X +','+ @Xiang where V=@Value
end
else
begin
update DT set X = X + @Xiang where V=@Value
end
fetch next from P into @Xiang
end
close P
deallocate P
fetch next from Q into @Value
end
close Q
DEALLOCATE Q
最后执行select * from DT语句查看结果:
喷漆银 前盖,后盖,手柄, 锁紧块,手柄, 锁紧块
喷漆银灰色 开关,收线,调速钮,吸口圈
注塑黑 底座,出风板,大滚轮,大滚轮套圈