考试辅导

名师推荐

试听名师的课 查看所有名师

根据列的范围分组汇总的Sql存储过程 发布时间:2010-06-25 17:32 来源:互联网

  1.需求说明
  有如下表数据:
  ID       NUM
  ----------- -----------
  1        2
  2        3
  3        2
  4        2
  5        12
  6        2
  7        1
  8        5
  9        1
  10       1
  11       1
  输入分组参数,比如输入 "2,5,8,10" ,实现按 ID<=2,2<ID<=5,5<ID<=8,8<ID<=10,ID>10 分组查询,要得到下面的数据:
  groupdata  num
  ---------- -----------
  id<=2     5
  2<id<=5   16
  5<id<=8   8
  8<id<=10   2
  id>10     1
  2.存储过程如下:
  --测试数据
  create table TestData(ID int,NUM int)
  insert TestData select 1,2
  union all select 2,3
  union all select 3,2
  union all select 4,2
  union all select 5,12
  union all select 6,2
  union all select 7,1
  union all select 8,5
  union all select 9,1
  union all select 10,1
  union all select 11,1
  go
  create proc spgroupcol
  @numlist varchar(1000)
  as
  set nocount on
  declare @t table(id int identity,groupdata varchar(10),a int,b int)
  declare @i int,@pnum varchar(10),@j int
  select @i=charindex(',',@numlist)
  ,@pnum=left(@numlist,@i-1)
  insert @t select 'id<='+@pnum,null,@pnum
  while @i>=1

  begin
  select @numlist=substring(@numlist,@i+1,len(@numlist)-@i)
  select @j=charindex(',',@numlist) ;  
  if @i=@j
  begin
  insert @t select @pnum+'<id<='+substring(@numlist,0,@i),@pnum,substring(@numlist,0,@i)
  select @pnum=left(@numlist,@i-1);
  end
  else
  begin
  insert @t select @pnum+'<id<='+substring(@numlist,0,@i+1),@pnum,substring(@numlist,0,@i+1)
  select @pnum=left(@numlist,@i);
  end
  select @i=charindex(',',@numlist) ;
  end
  insert @t select 'id>'+@numlist,@numlist,null
  select b.groupdata,num=sum(a.num)
  from TestData a,@t b
  where case 
  when b.a is null then case when a.id<=b.b then 1 else 0 end
  when b.b is null then case when a.id>b.a then 1 else 0 end
  else case when a.id>b.a and a.id<=b.b then 1 else 0 end
  end=1
  group by b.groupdata
  order by min(b.id)
  go
  spgroupcol '2,5,8,10'
  drop table TestData
  sql存储过程的单步调试要在Vs2008中,服务器管理器中连接上数据库,找到存储过程右键单步调试。

第一考试网友情提示:如果您遇到任何疑问,请登录第一考试网考试辅导频道或添加qq:,第一考试网以“为考友服务”为宗旨,秉承“快乐学习,轻松考试!”的理念,旨在为广大考友打造一个良好、温馨的学习与交流平台,欢迎持续关注。以上是小编为大家推荐的《根据列的范围分组汇总的Sql存储过程》相关信息。

编辑推荐

计算机等级考试辅导:SQL中JOB的运行状态

计算机等级考试辅导:SQLSERVER2005的引用

三级:把数据导入不同的表空间

2009年三级信息管理技术辅导:战略数据规划

教你三种方法卸载Windows7SP1Beta