首页 > 解决方案 > 增加 i 条件

问题描述

每当 v_id 的值不同时,我想将 i 增加 1。

    i = 1;
   
    for i in 1..10 loop 
      SELECT subject_details.NEXTVAL 
        INTO v_id 
        FROM dual;
    
      INSERT INTO employee (id, subject) 
           VALUES (i,v_id);

      i = i + 1;
    end loop;

这是做什么的

  id subject
    1  3647
    2  3647
    3  5678
    4  5678
    5  5678

但我想要的是每当“v_id”的值发生变化时将“i”的值增加1

id subject
1  3647
1  3647
2  5678
2  5678
2  5678

标签: sqloraclefor-loopplsqlincrement

解决方案


我认为您可以使用dense_rank()

select t.*, dense_rank() over (order by subject) 
from t;

如果这些值可以交错,那么您可以使用lag()和累积和:

select t.*,
       sum(case when prev_subject = subject then 0 else 1 end) over (order by id)
from (select t.*,
             lag(subject) over (order by id) as prev_subject
      from t
     ) t;

推荐阅读