增加 Oracle 中的列值

Increment a column value in Oracle

我需要根据特定条件增加列值。

我有 2 tables -

Table A 有 ID、姓名、日期等

Id  Name    Date
1   ABC 3/1/2014
2   ABC 4/1/2014
3   ABC 5/1/2014
4   DEF 4/1/2014
5   DEF 5/1/2014
6   HIJ 1/1/2014
7   HIJ 2/1/2014
8   HIJ 3/1/2014
9   HIJ 4/1/2014
10  HIJ 5/1/2014

Table B 有名称(外键)、日期(与 Table A 相同)、计数器等。

Name    Date    Counter(the value that I need is in this column, it will be zero by default)
ABC 3/1/2014    0
ABC 4/1/2014    1
ABC 5/1/2014    2
DEF 4/1/2014    0
DEF 5/1/2014    1
HIJ 1/1/2014    0
HIJ 2/1/2014    1
HIJ 3/1/2014    2
HIJ 4/1/2014    3
HIJ 5/1/2014    4

我需要增加 table 中显示的计数器。所以对于每个名字,计数器应该重置并从 0 开始,每个名字的日期都会不同,所以我需要考虑到这一点(这意味着我不能假设所有名字的 1/31/2014 都是 0。计数器会在 5/1/2014 结束。所以我需要更新计数器直到日期达到 5/1/2014。

完成此任务的最佳方法是什么?我正在尝试编写一个过程,但不确定如何为游标中的不同名称更新计数器。我愿意接受任何建议。谢谢

编辑:::更新代码

Update Table B, set counter = 0;

declare

cursor rec is

select a.name, a.postingdate, b.counter
from table A a
inner join table B b
on a.name = b.name
order by a.name, a.date;

begin

    open rec;
    LOOP
        fetch rec into v_name, v_date, v_counter;
        exit...........

**<How can I reset my counter here for different names>**
        if date < to_date ('01-may-2014', 'dd-mon-yy') then v_counter := v_counter +1;  
        end if;

        update table b set counter = v_counter where current of rec;
    END LOOP;
    commit;
END;

请copy/paste查看结果:

SELECT deptno, ename (your_counter-1) new_counter FROM 
 ( SELECT deptno, ename
       , ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY deptno, ename) your_counter
FROM scott.emp
);

10  CLARK   0
10  KING    1
10  MILLER  2
20  ADAMS   0
20  FORD    1
20  JONES   2
20  SCOTT   3
....

在您的情况下,您按名称进行分区。

以下查询应该可以满足您的要求:

SELECT NAME, TO_CHAR(SOME_DATE, 'MM/DD/YYYY'), ROWCOUNT-1 AS COUNTER
  FROM (SELECT NAME,
               SOME_DATE,
               ROW_NUMBER() OVER (PARTITION BY NAME
                                  ORDER BY ID, NAME, SOME_DATE) ROWCOUNT
          FROM TABLE_A);

SQLFiddle here

分享和享受。