将行数传递给Oracle中的列[重复]

Posted

技术标签:

【中文标题】将行数传递给Oracle中的列[重复]【英文标题】:Pass row count to a column in Oracle [duplicate] 【发布时间】:2017-10-06 03:02:14 【问题描述】:

我有一张没有 ID 的表。所以我想在总行数中添加一个 1 的新列。我在表中打开了一个新列,但我不知道如何用行数填充它。我在互联网上搜索,但找不到解决我问题的解决方案。你能告诉我怎么做吗?提前致谢。

【问题讨论】:

你想按什么顺序生成这个id列?如果它只需要是唯一的(并且不一定是无间隙的),您可以使用序列。您也可以在查询时使用row_number,而不是存储值 【参考方案1】:

您可以这样做(适用于 12c 或更高版本):

alter table your_table add id number generated always as identity;

不过,这也会为列生成新值,以供将来插入。

还有关于total row number,这应该几乎总是生成从1到“总行号”的值,但无论如何(不知道确切,什么时候可能会不正确),检查一下,在alter之后你可以做:select count(*), max(id) from your_table。值应该匹配在一起。

【讨论】:

此解决方案仅适用于 12c 或更高版本。 @APC - 谢谢,你是对的,更新了 如果 OP 使用 12c 这将是最好的解决方案【参考方案2】:

最简单的解决方案是

update your_table
set id = rownum;

但是,这不会帮助您将来插入此表。如果这是要发生的事情,请构建一个序列。

SQL> select max(id) from your_table;

   MAX(ID)
----------


SQL> create sequence your_table_seq;

Sequence created.

SQL> update your_table
  2  set id = your_table_seq.nextval;

30 rows updated.

SQL> select max(id) from your_table;

   MAX(ID)
----------
        30

SQL> select id from your_table;

        ID
----------
         1
         2
         3
....
        28
        29
        30

30 rows selected.

SQL> 

顺便说一句,现在您已经添加了一个 ID 列并填充了它,请务必将其作为主键强制执行:

alter table your_table add constraint your_table_pk primary key (id);

【讨论】:

以上是关于将行数传递给Oracle中的列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将行转置为 BigQuery 中的列(数据透视实现)[重复]

将行转置为具有条件的列[重复]

将行值转换为列,其值来自 spark scala 中的另一列 [重复]

Oracle SQL - 重复行并更新表中的列

需要将行转换为oracle中相似ID的列

更新重复行的列oracle