如何将 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 table 和 desired 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.
相关的内容
我的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 table 和 desired 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.
相关的内容