我有一张这样的表:
StepId | VehicleId| Description | SortIndex
---------------------------
1 |xxx | Description1 | 0
2 |yyyyy | Description2 | 0
3 |yyyyy | Description3 | 0
因此,一辆车可以有0到n步(由vehicleId引用)。 到目前为止,我按说明列排序了步骤。我现在想要更新SortIndex列,以便它们具有值,就像我按描述列对它们进行排序一样。因此,对于上面的示例,我希望:
StepId | VehicleId| Description | SortIndex
---------------------------
1 |xxx | Description1 | 1
2 |yyyyy | Description2 | 1
3 |yyyyy | Description3 | 2
我能做什么SQL魔法来实现这个目标?
由于
编辑:我使用的是SQL Server,也许游标可以完成这项任务答案 0 :(得分:0)
由于您在SQL Server
,您可以使用以下使用排名功能的查询:
SELECT StepId, VehicleId, Description, ROW_NUMBER() OVER (PARTITION BY VehicleId ORDER BY Description) as SortIndex
FROM #Vehicle
row_number()
会根据订单Description
组中的VehicleId
按其订单生成每行的编号。
答案 1 :(得分:0)
最简单的方法(在我看来)是使用带窗口函数的可更新CTE:
with toupdate as (
select t.*,
row_number() over (partition by vehicleId order by Description) as NewSortIndex
from likethat
)
update toupdate
set SortIndex = NewSortIndex;
如果您不想要update
但只是要返回结果,只需在CTE中使用该查询。