简化SQL双重游标实现数据重组

      上次关于数据重组的实现,再把过程给那个同学看了以后,他询问是否有更简化的算法。于是空闲时间想了下,终于Ok了。

      其中基本数据库结构Test以及数据内容和之前的一样,只是在实现上将存放重组后数据的表DT替换成了临时表#temp,并奖其初始信息直接存放在#temp中,以此减少游标的使用,更有效的提高了运行效率。

代码如下:
--建表并初始化数据
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('手柄, 锁紧块','喷漆银')

--实现
select distinct v,cast(''as varchar(254)) x into #temp from t
declare @V varchar(100)
declare @Xiang varchar(254)
declare @X varchar(154)
declare C cursor
for select X from T
open C
 fetch C into @Xiang
 while @@fetch_status=0
 begin
  set @V=(select v from T where x=@Xiang)
  set @X =(select x from #temp where v=@V)
  if @X=''
  begin
   update #temp set x = @Xiang where v= @V
  end
  else
  begin
   update #temp set x= x+','+ @Xiang where v=@V
  end
 fetch next from C into @Xiang
 end
 close C
 deallocate C

查看结果:
      select * from #temp
--drop table #temp

 

posted @ 2009-04-20 12:50  水星人已隐匿  阅读(307)  评论(0编辑  收藏  举报