Sql server SQL Server/Oracle:如何增加依赖于另一列的索引列?

Sql server SQL Server/Oracle:如何增加依赖于另一列的索引列?,sql-server,oracle,sql-update,Sql Server,Oracle,Sql Update,鉴于下表: Column1 Column2 idx ------------------- 1 1 0 2 1 0 3 2 0 4 3 0 5 3 0 1 3 0 如何使用UPDATE语句增加SQL Server和Oracle中依赖于column2的idx列 我希望: Column1 Column2 idx -------------------- 1

鉴于下表:

Column1 Column2 idx
-------------------
1       1       0
2       1       0
3       2       0
4       3       0
5       3       0
1       3       0
如何使用
UPDATE
语句增加SQL Server和Oracle中依赖于
column2
idx

我希望:

Column1 Column2 idx
--------------------
1       1       0
2       1       1
3       2       0
4       3       0
5       3       1
1       3       2
谢谢大家!

此(或类似)方法应适用于以下两种情况:

;with x as (
  select idx, row_number() over(partition by Column2 order by Column1) as new_idx
  from tbl
)
update x set idx = new_idx
(这里我假设第6行第1列有一个打字错误-如果没有,应该还有其他的东西来排序)

这种(或类似的)方法应该适用于以下两种情况:

;with x as (
  select idx, row_number() over(partition by Column2 order by Column1) as new_idx
  from tbl
)
update x set idx = new_idx

(这里我假设第6行的第1列有一个拼写错误-如果没有,应该还有其他东西需要订购)

对于Oracle,您需要一个MERGE语句:

merge into x using (
  select rowid as rid, 
         row_number() over(partition by Column2 order by Column1) as new_idx
  from tbl
) t on (t.rid = x.rowid)
when matched then 
  set idx = t.new_idx;

您可以使用表的主键列替换联接,而不是使用
rowid

对于Oracle,您需要一个MERGE语句:

merge into x using (
  select rowid as rid, 
         row_number() over(partition by Column2 order by Column1) as new_idx
  from tbl
) t on (t.rid = x.rowid)
when matched then 
  set idx = t.new_idx;

您可以用表的主键列替换联接,而不必使用
rowid

您尝试了什么?按第1列列出的idx顺序是什么?对于相同的column2值,是否可以有重复项(因为您已将其显示为非唯一)?您真的需要存储该值,还是在查询表时生成该值(如果删除了column1=5的行,会发生什么情况?)以及为什么这两种数据库类型—您是在试图找到一条对这两种类型都有效的语句,还是为每种类型找到单独的答案?应用
idx
列编号的逻辑是什么?它显然不是基于
column1
的排序顺序,所以应该应用什么逻辑?类似:排序在这种情况下不相关。我只想让每个Column2值都有一个从0开始的idx。您尝试了什么?按第1列列出的idx顺序是什么?对于相同的column2值,是否可以有重复项(因为您已将其显示为非唯一)?您真的需要存储该值,还是在查询表时生成该值(如果删除了column1=5的行,会发生什么情况?)以及为什么这两种数据库类型—您是在试图找到一条对这两种类型都有效的语句,还是为每种类型找到单独的答案?应用
idx
列编号的逻辑是什么?它显然不是基于
column1
的排序顺序,所以应该应用什么逻辑?类似:排序在这种情况下不相关。我只想让每列2的值都有一个idx,从0.0开始。可以在SQL Server中工作,但不能在Oracle中工作。谢谢。可以在SQL Server中工作,但不能在Oracle中工作。