Oracle Sql:添加对行进行计数的列,每次其他列的值更改时从1开始

Oracle Sql:添加对行进行计数的列,每次其他列的值更改时从1开始,sql,oracle,Sql,Oracle,我想这个已经讨论过了,但我没找到。我不熟悉使用oracle sql开发人员的sql 下面是我的问题的一个例子: 目前,Depot_ID是唯一的主键,由插入数据之前的序列和触发器生成。与此方法不同,我希望创建一个表,使其具有一个新列,每当示例中的第二列具有新值时,该列从1开始递增计数。如何创建示例中的第三列?(然后我想删除第一列,并使用第二列和第三列作为复合主键,但创建第3列失败) 感谢您提供的提示,Alex您可以使用行编号()功能: select t.*, row_number(

我想这个已经讨论过了,但我没找到。我不熟悉使用oracle sql开发人员的sql

下面是我的问题的一个例子:

目前,Depot_ID是唯一的主键,由插入数据之前的序列和触发器生成。与此方法不同,我希望创建一个表,使其具有一个新列,每当示例中的第二列具有新值时,该列从1开始递增计数。如何创建示例中的第三列?(然后我想删除第一列,并使用第二列和第三列作为复合主键,但创建第3列失败)


感谢您提供的提示,Alex

您可以使用
行编号()
功能:

select t.*,
       row_number() over (partition by foreign_key_1 order by depot_id) as new_column
from t;
虽然我回答了这个问题,但你应该回顾一下关于如何提问的指导原则。特别是:

  • 尽量在问题中包含所有相关信息。因此,样本数据和预期结果应作为文本存在于问题中
  • 尽量不要依赖非现场参考资料来理解问题。它们可以用来进一步说明这些观点,但问题本身就应该存在。这很重要,因为另一个站点可能有一天会消失
  • 尽量不要依赖图片获取关键信息。这使得很难对问题的内容编制索引
  • 欢迎来到堆栈溢出

感谢您的快速回复!这个查询非常有效。在我的代码中,它是:选择DEPOTS.*,行号()超过(按FK_客户机ID划分,按FK_客户机ID排序)作为DEPOTS的位置号