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语句查看结果:

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


 

转载于:https://www.cnblogs.com/Dana-Jing/archive/2009/02/25/1397913.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值