当前位置: 代码迷 >> Oracle开发 >> 序号自增的有关问题
  详细解决方案

序号自增的有关问题

热度:17   发布时间:2016-04-24 06:42:57.0
序号自增的问题
表结构为
year     no   id
2014    1     001 
2014    2     002
2014    3     003

我这有个序号自增sql语句
select nvl((
select max(nvl(no,1)) from MET_OPS_REGNO where year=to_number(to_char(to_date('2014-12-20 00:00:00','yyyy-MM-dd hh24:mi:ss'),'yyyy')
)),1)+1
 from dual


当录入的日期为2014年时,执行的查询语句是我想要的。为4。但是当查询语句到2015年时,查询结果为2。我希望从1开始。
如何实现?
------解决方案--------------------
引用:
表结构为
year     no   id
2014    1     001 
2014    2     002
2014    3     003

我这有个序号自增sql语句
select nvl((
select max(nvl(no,1)) from MET_OPS_REGNO where year=to_number(to_char(to_date('2014-12-20 00:00:00','yyyy-MM-dd hh24:mi:ss'),'yyyy')
)),1)+1
 from dual


当录入的日期为2014年时,执行的查询语句是我想要的。为4。但是当查询语句到2015年时,查询结果为2。我希望从1开始。
如何实现?


select nvl((select max(no)
             from MET_OPS_REGNO
            where year = to_number(to_char(to_date('2015-12-20 00:00:00',
                                                   'yyyy-MM-dd hh24:mi:ss'),
                                           'yyyy'))),
           0) + 1
  from dual;

------解决方案--------------------

select nvl((select max(nvl(no, 0))
             from MET_OPS_REGNO
            where year = to_number(to_char(to_date('2014-12-20 00:00:00',
                                                   'yyyy-MM-dd hh24:mi:ss'),
                                           'yyyy'))),
           0) + 1
  from dual

------解决方案--------------------
引用:
表结构为
year     no   id
2014    1     001 
2014    2     002
2014    3     003

我这有个序号自增sql语句
select nvl((
select max(nvl(no,1)) from MET_OPS_REGNO where year=to_number(to_char(to_date('2014-12-20 00:00:00','yyyy-MM-dd hh24:mi:ss'),'yyyy')
)),1)+1
 from dual


当录入的日期为2014年时,执行的查询语句是我想要的。为4。但是当查询语句到2015年时,查询结果为2。我希望从1开始。
如何实现?

为什么非要套两层呢。。直接NVL(MAX(NO), 0) + 1不就可以了么。。试了一下,可以
WITH MET_OPS_REGNO AS( 
SELECT '2014' YEAR,1 no,'001' ID FROM dual UNION ALL 
SELECT '2014' YEAR,2 no,'002' ID FROM dual UNION ALL 
SELECT '2014' YEAR,3 no,'003' ID FROM dual
 ) 
 SELECT NVL(MAX(NO), 0) + 1
   FROM MET_OPS_REGNO
  WHERE YEAR = TO_NUMBER(TO_CHAR(TO_DATE('2016-12-20 00:00:00',
                                         'yyyy-MM-dd hh24:mi:ss'),
                                 'yyyy'))
  相关解决方案