有如下表数据:
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/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。