一个根据列的范围分组汇总的Sql存储过程

简介:

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),int,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.is null then case when a.id<=b.then 1 else 0 end

 when b.is null then case when a.id>b.then 1 else 0 end

 else case when a.id>b.and a.id<=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中,服务器管理器中连接上数据库,找到存储过程右键单步调试。


本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2009/09/12/groupcolumnscope.html,如需转载请自行联系原作者

相关文章
|
27天前
|
SQL
sql server模糊查询、分组
sql server模糊查询、分组
12 1
|
3月前
|
SQL 存储 关系型数据库
sql语句,索引,视图,存储过程
sql语句,索引,视图,存储过程
27 0
|
4月前
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day10】电商分组TopK实战
每天一道大厂SQL题【Day10】电商分组TopK实战
31 0
|
3月前
|
存储 SQL 缓存
4.2.1 SQL语句、索引、视图、存储过程
4.2.1 SQL语句、索引、视图、存储过程
|
27天前
|
存储 SQL 数据库
sql serve存储过程
sql serve存储过程
14 0
|
1月前
|
存储 SQL
物料清单应用输入模板的SQL存储过程设计
物料清单应用输入模板的SQL存储过程设计
|
3月前
SQL-分组查询
SQL-分组查询
|
3月前
|
存储 SQL Oracle
PL/SQL存储过程的使用
PL/SQL存储过程的使用
65 1
|
3月前
|
SQL 自然语言处理
leecode-SQL-1484-按日期分组销售产品
leecode-SQL-1484-按日期分组销售产品
27 0
|
3月前
|
SQL
四、SQL分组查询
四、SQL分组查询
31 0