SQL Server 2005实现动态交叉表存储过程

动态交叉表就是列表会根据表中数据的情况动态创建列。

create procedure corss
 @strTabName varchar(50), --表名
 @strCol varchar(50), --列名
 @strGroup varchar(50),  --分组字段
 @strNumber varchar(50), --被统计的字段
 @strSum varchar(10)='Sum' --运算方式
as
 declare @strSql varchar(1000),@strTempCol varchar(100)
 execute('declare corss_cursor for select
distinct'+@strCol+'from'+@strTabName+'for read only') --生成游标
 begin
 set nocount on
 set @strSql='select'+@strGroup+','+@strSum+'(
'+@strNumber+') as ['+@strNumber+']' --查询的前半段
  open corss_cursor
  while(0=0)
   begin
    fetch next from corss_cursor --遍历游标,将列头信息放入变量@strTempCol
    into @strTempCol
    if(@@fetch_status<>0)break
    set @strSql=@strSql+','+@strSum+'(
case'+@strCol+'when'''+@strTempCol+'''then'+@strNumber+'else null end)as ['+@strTempCol+']'--gz查询
   end
  set @strSql=@strSql+'from'+@strTabName+'group
by'+@strGroup --构造查询
  execute(@strSql)
  if @@error<>0 return @@error --如果出错,返回错误代码
  close corss_cursor
 deallocate corss_cursor return 0 --释放游标,返回0表示成功
 end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值