zoukankan      html  css  js  c++  java
  • 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以上
    
  • 相关阅读:
    【BZOJ1053】[HAOI2007]反素数
    【BZOJ1052】[HAOI2007]覆盖问题
    【BZOJ1051】[HAOI2006]受欢迎的牛
    【BZOJ1050】[HAOI2006]旅行
    laravel 操作多数据库总结
    微服务浅述---架构演进
    分布式锁
    laravel自动生成model
    springboot集成quartz实现任务调度
    laravel 队列服务使用总结
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3161367.html
Copyright © 2011-2022 走看看