如何将 row_number 分配给 Oracle SQL 中的新列

How to assign row_number to new column in Oracle SQL

我的table长得像

yr     num   name
2010    1     a
2010    2     b
2011    3     c
2011    1     a
2011    2     b   

我必须为此 table 生成序列,它应该如下所示

yr     num   name   seq
2010    1     a      1
2011    1     a      2
2010    2     b      1
2011    2     b      2
2011    3     c      1

您可以使用解析 ROW_NUMBER 函数生成所需的序列。

例如,

假设您的 现有 table 看起来像:

    SQL> SELECT * FROM t;

            YR        NUM N
    ---------- ---------- -
          2010          1 a
          2010          2 b
          2011          3 c
          2011          1 a
          2011          2 b

    SQL>

I generate the desired output using **ROW_NUMBER** and name it `seq`:

SQL> SELECT t.*, row_number() over (partition by name order by yr, name) seq FROM t;

        YR        NUM N        SEQ
---------- ---------- - ----------
      2010          1 a          1
      2011          1 a          2
      2010          2 b          1
      2011          2 b          2
      2011          3 c          1

SQL>

现在,我使用上述查询创建一个新的 table:

SQL> CREATE TABLE t_new AS SELECT t.*, row_number() OVER (PARTITION BY NAME ORDER BY yr, NAME) seq FROM t;

Table created.

SQL>

所以,我有 new tabledesired sequence column:

SQL> SELECT * FROM t_new;

        YR        NUM N        SEQ
---------- ---------- - ----------
      2010          1 a          1
      2011          1 a          2
      2010          2 b          1
      2011          2 b          2
      2011          3 c          1

SQL>

您不需要 旧的 table,所以 放弃它并重命名新的 table回到旧 table:

SQL> DROP TABLE t PURGE;

Table dropped.

SQL> ALTER TABLE t_new RENAME TO t;

Table altered.

SQL> SELECT * FROM t;

        YR        NUM N        SEQ
---------- ---------- - ----------
      2010          1 a          1
      2011          1 a          2
      2010          2 b          1
      2011          2 b          2
      2011          3 c          1

SQL>

完成!

注意 :

使用 CTAS 方法,请确保创建必要的索引和其他与旧 table.

相关的内容