SQL:使用索引更新列,该索引在列更改时重置
首先,很抱歉问题的措辞。我不太确定如何表达它。希望下面的例子是清楚的 如果我有桌子SQL:使用索引更新列,该索引在列更改时重置,sql,stored-procedures,sybase,Sql,Stored Procedures,Sybase,首先,很抱歉问题的措辞。我不太确定如何表达它。希望下面的例子是清楚的 如果我有桌子 Id | Type | Order 0 | Test | null 1 | Test | null 2 | Blah | null 3 | Blah | null 我想把它变成这个 Id | Type | Order 0 | Test | 1 1 | Test | 2 2 | Blah | 1 3 | Blah | 2 因此,我按“类型”对表进行分组,并递增地为“顺序”分配一个数字。每种类型从
Id | Type | Order
0 | Test | null
1 | Test | null
2 | Blah | null
3 | Blah | null
我想把它变成这个
Id | Type | Order
0 | Test | 1
1 | Test | 2
2 | Blah | 1
3 | Blah | 2
因此,我按“类型”对表进行分组,并递增地为“顺序”分配一个数字。每种类型从1开始
我该怎么做呢
我使用的数据库是Sybase 15
select
Id,
Type,
row_number() over(partition by Type order by Id) as [Order]
from YourTable
你应该利用这个功能得到你想要的东西
行号(Transact-SQL)
返回结果分区内行的序列号
设置,从每个分区中第一行的1开始
我的回答假设是SQL Server。您的关系数据库管理系统是什么?请详细说明。我正在使用Sybase,虽然我确信您的答案是正确的,但我似乎无法在Sybase中获得相同的结果。我已删除了我的答案,并添加了
Sybase
标记,以便其他人了解您的RDBMS。我认为您仍应保留您的答案作为参考。什么不适用?Sybase(ASE?SQL Anywhere?)15是否没有实现行数?而这并不能解决我的确切问题。在一般情况下,这是解决问题的正确方法。