SELECT DECODE(MIN(MIN(GROUP_CODE)), 1, MIN(MAX(GROUP_CODE)) + 1, 1) GROUP_CODE
  FROM (SELECT GROUP_CODE,
               GROUP_CODE - ROW_NUMBER() OVER(ORDER BY GROUP_CODE) DIFF
          FROM I5105
         WHERE GROUP_CODE BETWEEN 2 AND 999999)
 GROUP BY DIFF当表没有数据时,得到结果为
GROUP_CODE
1
问题是:GROUP_CODE BETWEEN 2 AND 999999不起作用
我想得到结果为
GROUP_CODE
3
怎么改SQL,谢谢了!

解决方案 »

  1.   

    可能没说明白,
    BETWEEN 0 AND 999999时,
    GROUP_CODE
    1
    BETWEEN 2 AND 999999时,
    GROUP_CODE
    3
    取最小的不连续编号,谢谢
      

  2.   

    那你把你的DECODE函数的默认值修改下,你想他变多少就多少
    DECODE(MIN(MIN(GROUP_CODE)), 1, MIN(MAX(GROUP_CODE)) + 1, 10000)
      

  3.   

    是不是这样哦?
    SELECT DECODE(MIN(MIN(GROUP_CODE)), 1, MIN(MAX(GROUP_CODE)) + 1, 3) GROUP_CODE
      FROM (SELECT GROUP_CODE,
      GROUP_CODE - ROW_NUMBER() OVER(ORDER BY GROUP_CODE) DIFF
      FROM I5105
      WHERE GROUP_CODE BETWEEN 2 AND 999999)
     GROUP BY DIFF
      

  4.   

    表如果没有数据,GROUP_CODE为1;
    如果有数据:1、3、7、10、11
    我想
    设定从1到100取最小的不连续数值GROUP_CODE为2;
    设定从3到100取最小的不连续数值GROUP_CODE为4;
      

  5.   

    我的SQL语句只是取了不连续最小的值,我想随便最小值的起始范围
      

  6.   

    不知道理解楼主意思对不对。
    select nvl(MIN(GROUP_CODE), 0) + 1
      FROM (SELECT GROUP_CODE,
                   GROUP_CODE - ROW_NUMBER() OVER(ORDER BY GROUP_CODE) DIFF
              FROM I5105)
     WHERE GROUP_CODE BETWEEN N AND 999999