【发布时间】:2020-02-11 11:12:34
【问题描述】:
我有这个 SQL
;WITH Sorted AS (
SELECT authorid,
ROW_NUMBER() OVER (ORDER BY sorted) AS RowNumber
FROM author
WHERE authorid <> @id
)
UPDATE p
SET p.sorted =
(CASE
WHEN p.authorid = @id THEN @id
WHEN s.RowNumber >= @id THEN s.RowNumber + 1
ELSE s.RowNumber
END)
FROM author p
LEFT JOIN Sorted s ON p.authorid = s.authorid
但是这段代码是有问题的,因为我将值加了 1,如果序列是像 1,2,3,4,5 这样的顺序,它就可以工作。
但是如果删除一条记录,它会搞砸一切
所以克服了这个问题,我在想我是否可以使用primarykey 列作为排序列中的相同值,即使我删除,排序也应该没有任何问题,上面的代码将对记录进行排序正确。
因为在某一时刻,只有 1 个项目会向上或向下排序。
更像是行将被交换,
知道我怎样才能让它工作吗?
这里是sample data
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。并解释代码应该做什么。
-
CFFiddle 坏了。另外请确保问题是独立的,而不依赖于外部链接。并确保将示例数据添加为表格文本,而不是图像或外部链接。
-
破碎是什么意思
-
真正有用的是样本数据和所需的输出。冷聚变小提琴不是答案。看这里。 minimal reproducible example
标签: sql sql-server sorting sql-update