zoukankan      html  css  js  c++  java
  • 编号处理

    编号处理这个在日常的工作中中也是比较常见,这里做下备忘。

    -- ==========================================================================================
    --简单情况
    -- ==========================================================================================
    DECLARE @t TABLE(serialNum INT)
    INSERT INTO @t 
    SELECT 1 UNION ALL 
    SELECT 2 UNION ALL 
    SELECT 5 UNION ALL 
    SELECT 6 UNION ALL 
    SELECT 9 
    
    -- ==========================================================================================
    --是否存在缺号,当前编号不存在下一个编号或是不存在上一个编号则表明存在缺号
    -- ==========================================================================================
    SELECT * FROM @t a WHERE NOT EXISTS(SELECT 1 FROM @t WHERE serialNum=a.serialNum+1)
    SELECT * FROM @t a WHERE NOT EXISTS(SELECT 1 FROM @t WHERE serialNum=a.serialNum-1)
    --存在下面情况的记录也表明存在缺号【表述太绕口不在表述】
    SELECT * FROM @t a WHERE serialNum>(SELECT MAX(serialNum)+1 FROM @t WHERE serialNum<a.serialNum)
    
    -- ==========================================================================================
    ----缺号分布情况
    -- ==========================================================================================
    SELECT 
        startNum=(SELECT MAX(serialNum)+1 FROM @t b WHERE serialNum<a.serialNum)
        ,endNum=serialNum-1 FROM  @t a WHERE  serialNum>(SELECT MAX(serialNum)+1 FROM @t WHERE serialNum<a.serialNum)
    
    SELECT 
        startNum=(SELECT MAX(serialNum)+1 FROM @t b WHERE serialNum<a.serialNum 
              AND NOT EXISTS(SELECT 1 FROM @t WHERE serialNum=b.serialNum+1))     ,endNum=serialNum-1 FROM @t a WHERE serialNum>(SELECT MAX(serialNum)+1 FROM @t WHERE serialNum<a.serialNum) -- ========================================================================================== ----已用编号分布 -- ========================================================================================== SELECT startNum=serialNum,     endNum=(SELECT min(serialNum) FROM @t c WHERE serialNum>=a.serialNum
            AND NOT EXISTS(SELECT 1 FROM @t WHERE serialNum=c.serialNum+1))     FROM @t a WHERE NOT EXISTS(SELECT 1 FROM @t WHERE serialNum=a.serialNum-1) -- ========================================================================================== --复杂情况 -- ========================================================================================== DECLARE @t TABLE(MType VARCHAR(20), serialNum INT) INSERT INTO @t SELECT 'A',1 UNION ALL SELECT 'A',2 UNION ALL SELECT 'A',5 UNION ALL SELECT 'B',6 UNION ALL SELECT 'B',9 UNION ALL SELECT 'B',12 UNION ALL SELECT 'B',13 -- ========================================================================================== --是否存在缺号,当前编号不存在下一个编号或是不存在上一个编号则表明存在缺号 -- ========================================================================================== SELECT * FROM @t a WHERE NOT EXISTS(SELECT 1 FROM @t WHERE MType=a.MType AND serialNum=a.serialNum+1) SELECT * FROM @t a WHERE NOT EXISTS(SELECT 1 FROM @t WHERE MType=a.MType AND serialNum=a.serialNum-1) --存在下面情况的记录也表明存在缺号【表述太绕口不在表述】 SELECT * FROM @t a WHERE serialNum>(SELECT MAX(serialNum)+1 FROM @t WHERE MType=a.MType AND serialNum<a.serialNum) -- ========================================================================================== ----缺号分布情况 -- ========================================================================================== SELECT MType, startNum=(SELECT MAX(serialNum)+1 FROM @t b WHERE MType=a.MType AND serialNum<a.serialNum) ,endNum=serialNum-1 FROM @t a WHERE serialNum>(SELECT MAX(serialNum)+1 FROM @t WHERE MType=a.MType AND serialNum<a.serialNum) SELECT MType,     startNum=(SELECT MAX(serialNum)+1 FROM @t b WHERE MType=a.MType AND serialNum<a.serialNum
            AND NOT EXISTS(SELECT 1 FROM @t WHERE MType=b.MType AND serialNum=b.serialNum+1))     ,endNum=serialNum-1 FROM @t a WHERE serialNum>
            (SELECT MAX(serialNum)+1 FROM @t WHERE MType=a.MType AND serialNum<a.serialNum) -- ========================================================================================== ----已用编号分布 -- ========================================================================================== SELECT MType, startNum=serialNum,   endNum=(SELECT min(serialNum) FROM @t c WHERE MType=a.MType AND serialNum>=a.serialNum
      AND NOT EXISTS(SELECT 1 FROM @t WHERE MType=c.MType and serialNum=c.serialNum+1)) FROM @t a WHERE NOT EXISTS(SELECT 1 FROM @t WHERE MType=a.MType AND serialNum=a.serialNum-1) CREATE TABLE #t(serialNum INT) INSERT INTO #t SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 9 SELECT * FROM #t --是否存在缺号 SELECT * FROM #t a WHERE NOT EXISTS(SELECT 1 FROM #t WHERE serialNum=a.serialNum-1)--不存在前一编号 SELECT * FROM #t a WHERE NOT EXISTS(SELECT 1 FROM #t WHERE serialNum=a.serialNum+1)--不存在后一编号 SELECT * FROM #T a WHERE serialNum>(SELECT MAX(serialNum)+1 FROM #t WHERE serialNum<a.serialNum) --自己理解 --缺号分布情况,不存在之后的编号,说明当前编号是一段连续编号的结束编号即为缺失编号的起始编号 --A SELECT STARTN=serialNum+1, ENDN=(SELECT MIN(serialNum) FROM #t b WHERE serialNum>a.serialNum AND NOT EXISTS(SELECT 1 FROM #t WHERE serialNum=b.serialNum-1))-1 FROM #t a WHERE NOT EXISTS(SELECT 1 FROM #t WHERE serialNum=a.serialNum+1) --B SELECT STARTN=(SELECT MIN(serialNum) FROM #t b WHERE serialNum>a.serialNum AND NOT EXISTS(SELECT 1 FROM #t WHERE serialNum=b.serialNum+1))+1, ENDN=(SELECT MIN(serialNum) FROM #t b WHERE serialNum>a.serialNum AND NOT EXISTS(SELECT 1 FROM #t WHERE serialNum=b.serialNum-1))-1 FROM #t a WHERE NOT EXISTS(SELECT 1 FROM #t WHERE serialNum=a.serialNum-1) --C SELECT STARTN=(SELECT max(serialNum) FROM #t b WHERE serialNum<a.serialNum AND NOT EXISTS(SELECT 1 FROM #t WHERE serialNum=b.serialNum+1))+1, ENDN=serialNum-1 FROM #T a WHERE serialNum>(SELECT MAX(serialNum)+1 FROM #t WHERE serialNum<a.serialNum)

      

  • 相关阅读:
    Knol of Fabio Maulo
    调用非.net系统的Webservice的探索 ( 二 ) WSE
    在Sql Server 使用系统存储过程sp_rename修改表名或列名
    Who is locking the DB account?
    (python learn) 7 字典
    (python learn) 8 流程控制
    (python learn) 4 number&& string
    where is the data come from after we drop the table
    (healthy recorder) 治疗第6天
    (python learn) 6 列表
  • 原文地址:https://www.cnblogs.com/mfkaudx/p/3511874.html
Copyright © 2011-2022 走看看