MSSQL中游标例子-纵转横

本文介绍了一种使用SQL语句结合临时表和游标来整理数据的方法。通过具体实例展示了如何将纵向分布的数据转换为横向展示的形式,适用于需要进行数据整理和格式调整的场景。

 

/*
纵向表内容
f_billno,f_invname
0001 商品1
0002 商品A
0001 商品2
0001 商品3
0002 商品B
0003 商品I
0003 商品II
目标效果
fid,ftext
0001 商品1商品2商品3
0002 商品A商品B
0003 商品I商品II

以下是SQL语句,用到了临时表和游标的使用。
*/
--查看源数据
select f_billno,f_invname from test

--定义两个临时变量用来保存游标取得的数据
DECLARE @c varchar(255)
DECLARE @c1 varchar(255)
--删除临时表
if object_id('tempdb..#tmp') is not null drop table #tmp
--建立临时表及生成数据
Create Table #tmp(fid varchar(4),ftext varchar(255))
insert into #tmp
select f_billno,'' from test group by f_billno
--取游标数据
declare cur_test CURSOR FOR
select f_billno,f_invname from test
open cur_test
fetch next from cur_test into @c,@c1
--第一个循环
while @@fetch_status=0
begin
--重复取数据并生成相应的处理SQL
exec('update #tmp set ftext=ftext+'''+@c1+' '' where fid='''+@c+'''');
fetch next from cur_test into @c,@c1
end
--显示结果数据
select * from #tmp
--关闭游标
close cur_test
deallocate cur_test

 

转载于:https://www.cnblogs.com/star5/archive/2010/11/19/1881919.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值