SQL存储过程动态查询数据区间

2014-11-24 10:13:35 · 作者: · 浏览: 0
SQL存储过程动态查询数据区间
以前经常看到人查询 数据库采用left join及case方式,一条一条的枚举查询整个数据的数据区间方法可行,但是数据一但很大,枚举就死悄悄,在网上查看,几乎全是照抄case ,left join枚举无耐自己写了个存储过程,希望给大家抛砖引玉!
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROC pro_UserList 
@jisum int,--基数
@step int,--步长
@max int--列举最大值
as
SET NOCOUNT ON

----Create Temporary Table
CREATE TABLE #tempTable
(sumlist int,--统计数
tongji varchar(50)--统计区间
)

--initial
--INSERT INTO #tempTable VALUES(0,'00-00')

WHILE (0<1)
   BEGIN
     IF(@jisum*@step<@max)
        BEGIN 
           INSERT INTO #tempTable SELECT COUNT(*),STR(@jisum,3,0)+'-'+STR(@jisum*@step,3,0) 
           FROM [dbo].[UserList] 
           WHERE age>
=@jisum AND age<@jisum*@step END ELSE BEGIN INSERT INTO #tempTable SELECT COUNT(*),STR(@jisum,3,0)+'以上' FROM [dbo].[UserList] WHERE age>=@jisum BREAK END SELECT @jisum=@jisum*@step END SELECT sumlist AS '数量',tongji AS '区间统计(年龄)' FROM #tempTable go EXEC pro_UserList 20,2,100 --EG: --UserList --id name age --1 aa 20 --2 bb 21 --3 cc 23 --4 dd 30 --5 ee 33 --6 dd 40 --7 ff 70 --8 gg 90 --9 mm 101 --10 jj 103 --打印结果: --数量 统计区间(年龄 --5 20- 40 --2 40-80 --3 80以上