我有一个列C1,C2,C3,C4,C5,C6和计数表。我必须按照C1,C2,C3,C4,C5的顺序排列记录。对于第一条记录,计数将为0,那么如果下一行的C1,C2,C3,C4,C5的值与前一行相同,那么我必须通过加+1来更新计数列。所以这就是我期待: 表:根据以前的记录更新列
C1 C2 C3 C4 C5 C6 Count
-------------------------------------------
1 A X X1 AA 123 0
1 A X X1 AA 121 1
1 A X X1 AA 118 2
1 A X X1 AA 117 3
2 B X X2 AA 234 0
8 A Y X3 AA 298 0
8 A Y X3 AA 800 1
我使用Oracle数据库。我用Cursor with Order by编写了一个PL SQL块,然后在BULK COLLECT中使用该游标,并与前一记录进行迭代。但是,Count列更新为意外记录并花费比预期多得多的时间,表中有大约40万条记录。我无法在这里键入我的代码,因为实际代码在客户端计算机中。任何帮助,高度赞赏。可以使用PL/SQL或简单SQL。 DB是Oracle。
为什么需要用光标和BULK COLLECT编写一个PL/SQL块并遍历每一行等?学习在普通SQL中这样做的正确方法要容易得多,而且效率要高得多 - 而且学习适当的SQL比学习PL/SQL要花费更少的时间。那么:为什么你需要在表中排序“计数”?在视图中或在查询中生成报告是有意义的;将它存放在桌子上只会导致未来的问题。如果将来某行被删除,或者C3从Y更正为X,该怎么办?现在你必须重新计算整个列!馊主意。 – mathguy