【发布时间】:2014-05-27 18:08:37
【问题描述】:
我有一个表 table 有 2 列 column1 和 column2。我正在执行以下查询以获取所有重复的行并枚举每组重复行中的行:
CURSOR c
IS
SELECT groupnum,
column1,
column2,
seqnum
FROM (SELECT t.*,
COUNT (*) OVER (PARTITION BY column1, column2)
AS cnt,
DENSE_RANK () OVER (ORDER BY column1, column2)
AS groupnum,
ROW_NUMBER ()
OVER (PARTITION BY column1, column2
ORDER BY column1)
AS seqnum
FROM table) t
WHERE cnt > 1
ORDER BY groupnum;
对于具有这些值的表 table
+------------+---------+
| COLUMN1 | COLUMN2 |
+------------+---------+
| a | x |
| a | x |
| o | o |
| o | o |
+------------+---------+
光标将检索此数据:
+----------+------------+------------+--------+
| GROUPNUM | COLUMN1 | COLUMN2 | SEQNUM |
+----------+------------+------------+--------+
| 1 | a | x | 1 |
| 1 | a | x | 2 |
| 2 | o | o | 1 |
| 2 | o | o | 2 |
+----------+------------+------------+--------+
我的目标是从SEQNUM 列中选择每个值,并更新表table 中column1 列中的对应字段:
+------------+---------+
| COLUMN1 | COLUMN2 |
+------------+---------+
| a1 | x |
| a2 | x |
| o1 | o |
| o2 | o |
+------------+---------+
我尝试了一个游标 FOR 循环,但我无法弄清楚如何在 column1 中的每个字段和每个 SEQNUM 之间建立对应关系。
【问题讨论】: