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以上

你可能感兴趣的:(存储过程)