动态分组查询
来源:互联网 发布:网络与新媒体 编辑:程序博客网 时间:2024/05/13 03:37
原帖地址:
http://community.csdn.net/Expert/topic/3428/3428792.xml?temp=.6476251
--示例数据
create table 表(ID int,NUM int)
insert 表 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
go
/*--问题说明:
输入分组参数,比如输入 "3,6" ,实现按 ID<=3,3<ID<=6,ID>6 分组查询
输入分组参数,比如输入 "2,5,8" ,实现按 ID<=2,2<ID<=5,5<ID<=8,ID>8 分组查询
--*/
--查询的存储过程
create proc p_qry
@numlist varchar(1000)
as
set nocount on
declare @t table(id int identity,组 varchar(10),a int,b int)
declare @i int,@pnum varchar(10)
select @i=charindex(',',@numlist+',')
,@pnum=left(@numlist,@i-1)
,@numlist=stuff(@numlist,1,@i,'')
,@i=charindex(',',@numlist)
insert @t select 'id<='+@pnum,null,@pnum
while @i>0
begin
insert @t select @pnum+'<id<='+left(@numlist,@i-1),@pnum,left(@numlist,@i-1)
select @pnum=left(@numlist,@i-1)
,@numlist=stuff(@numlist,1,@i,'')
,@i=charindex(',',@numlist)
end
insert @t select 'id>'+@numlist,@numlist,null
select b.组,num=sum(a.num)
from 表 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.组
order by min(b.id)
go
--调用存储过程进行查询
exec p_qry '2,5,8'
go
--删除测试
drop table 表
drop proc p_qry
/*--测试结果
组 num
---------- -----------
id<=2 5
2<id<=5 16
id>8 1
--*/
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- 动态分组查询
- mybatis 动态sql 多表分组查询
- 单表导入/导出文本文件
- 创建作业的通用存储过程
- 巧解找不到MSVCR80.dll 的问题
- 生成交叉表的简单通用存储过程
- 字符串分拆查询
- 动态分组查询
- 数据汇总加排序
- 根据当月数据库自动生成下个月数据库--1
- 根据当月数据库自动生成下个月数据库--2
- 移动窗口一个空间的代码
- 树形数据转换
- 动态关联表
- 自定义公式的计算处理
- 报表统计