一个根据列的范围分组汇总的Sql存储过程
发布时间:2020-12-12 12:36:56 所属栏目:MsSql教程 来源:网络整理
导读: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,2ID=5,5ID=8,8ID=10,ID10 分组查询,要得到下面的数据: groupdata num ---------- ----------- id=
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,@i),@pnum,substring(@numlist,@i) select @pnum=left(@numlist,@i-1); end else begin insert @t select @pnum+'<id<='+substring(@numlist,@i+1),@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,10' drop table TestData sql存储过程的单步调试要在Vs2008中,服务器管理器中连接上数据库,找到存储过程右键单步调试。 转自:http://www.cnblogs.com/carysun/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |