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

本文介绍了一种使用SQL存储过程来替代LEFT JOIN及CASE语句进行数据区间统计的方法,这种方法尤其适用于大数据集的统计任务。通过创建临时表并利用循环插入数据的方式,能够有效地避免枚举查询带来的性能瓶颈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前经常看到人查询数据库采用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以上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值