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

时间:2023-03-09 16:35:39
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以上