循环通过一组值,比较并增加计数

时间:2015-04-27 11:42:36

标签: oracle plsql

我在类型列

中有一组值
types
ABC
EVAL
IBC
ABC
IBC
IBC
EVAL

我想从第一行循环并与下一个值进行比较,每次值不同时我想增加计数。例如,如果我将第一个值与第二个ABC = EVAL进行比较,因为它们是差异,我想增加计数。在下一轮中,我将第二行的值与第三行的值进行比较,即EVAL = IBC,再次因为它们是差异,我想增加计数。

我尝试使用游标,但我无法获得游标中的下一个列值。

2 个答案:

答案 0 :(得分:3)

要访问排序结果中的下一行,您可以使用$('.identifierClass').hover(function(e) { if(condition) // is true { $(element).attr("href", "url/goes/here").off().click(function(e) { $(element).attr("target", "_blank"); }); } }); 函数:

您可以使用类似这样的内容作为光标的语句:

lead()

答案 1 :(得分:0)

如果您的用例不允许您使用带有lead()函数的单个查询,则可以执行此操作。

设置:

create table temp_tab(
  t varchar(10),
  last_change date
);

insert into temp_tab values ('ABC',sysdate);
insert into temp_tab values ('EVAL',sysdate);
insert into temp_tab values ('IBC',sysdate);
insert into temp_tab values ('ABC',sysdate);
insert into temp_tab values ('IBC',sysdate);
insert into temp_tab values ('IBC',sysdate);
insert into temp_tab values ('EVAL',sysdate);

循环并增加计数:

declare
  counter number := 0;
  prev_val varchar(10);

  cursor getRecords is 
  select t
  from temp_tab
  order by last_change;

begin
  -- loop through the cursor
  for c in getRecords loop
    dbms_output.put_line('c.t: ' || c.t);
    -- if the cursor value is the same as the previous value increment the counter
    if (prev_val = c.t) then
      counter := counter + 1;
    end if;
    -- set the previous value equal to the current cursor value
    prev_val := c.t;
  end loop;
  dbms_output.put_line('counter: ' || counter);
end;

你得到这样的输出:

c.t: ABC
c.t: EVAL
c.t: IBC
c.t: ABC
c.t: IBC
c.t: IBC
c.t: EVAL
counter: 1