我想知道删除记录后重新排序记录的最有效方法是什么。基本上我有类似(ItemID,SortOrder)的东西。因此,当我删除一个项目时,SortOrder列将不再是增量。我想重新编号排序顺序,以便数字再次增量。
我想也许我可以用RANK功能做到这一点......但我不太确定该怎么做。
答案 0 :(得分:4)
如果你正在使用支持T-SQL的东西(即不是精简版),那么这应该可行。
假设您的表名为Item
且订单目前是增量的(无间隙),
declare @SortOrder int
select @SortOrder = SortOrder from Item where ItemID = @ItemID
update Item set SortOrder = SortOrder - 1 where SortOrder > @SortOrder
delete Item where ItemID = @ItemID
答案 1 :(得分:1)
假设这是一个定期整理,那么以下将有助于“修复”所有差距。
SELECT *
INTO #TEST
FROM (SELECT 1, 1, 1
UNION ALL
SELECT 2, 1, 3
UNION ALL
SELECT 3, 1, 4
UNION ALL
SELECT 4, 2, 2
UNION ALL
SELECT 5, 2, 3
UNION ALL
SELECT 6, 2, 4)H(PK, ItemID, SortOrder)
WITH Tidied
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY ItemID
ORDER BY SortOrder) AS NewSortOrder
FROM #TEST)
UPDATE Tidied
SET SortOrder = NewSortOrder