SQL双重游标实现数据重组

还是那个同学,让我帮忙把格式如下的数据集进行重组成以颜色为标志的信息,冒号前为数据项,后为数据值。

前盖,后盖:喷漆银
开关,收线,调速钮,吸口圈:喷漆银灰色
底座,出风板,大滚轮,大滚轮套圈:注塑黑
手柄, 锁紧块:喷漆银

首先,创建一个数据表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语句查看结果:

喷漆银        前盖,后盖,手柄, 锁紧块,手柄, 锁紧块
喷漆银灰色  开关,收线,调速钮,吸口圈
注塑黑        底座,出风板,大滚轮,大滚轮套圈


 

posted @ 2009-02-25 14:29  水星人已隐匿  阅读(427)  评论(0)    收藏  举报