我有一些现有数据需要根据以下几个因素应用“SortOrder”:
ORDER BY Name
)以增加排序顺序。以下是一些示例数据,以帮助说明我在说什么:
我有什么:
Id OwnerId Name SortOrder
------ ------- ---------------------- ---------
1 1 A Name NULL
2 1 C Name NULL
3 1 B Name NULL
4 2 Z Name NULL
5 2 Z Name NULL
6 2 A Name NULL
我需要什么:
Id OwnerId Name SortOrder
------ ------- ---------------------- ---------
1 1 A Name 1
3 1 B Name 2
2 1 C Name 3
6 2 A Name 1
4 2 Z Name 2
5 2 Z Name 3
如果更容易将数据从一个表移动到下一个表,则可以以UPDATE
语句的形式完成,也可以执行INSERT INTO (...) SELECT FROM (...)
。
答案 0 :(得分:6)
轻松 - 使用CTE(通用表格表达式)和ROW_NUMBER()
排名功能:
;WITH OrderedData AS
(
SELECT Id, OwnerId, Name,
ROW_NUMBER() OVER(PARTITION BY OwnerId ORDER BY Name, Id) AS 'SortOrder'
FROM
dbo.YourTable
)
SELECT *
FROM OrderedData
ORDER BY OwnerId, SortOrder
PARTITION BY
子句将您的数据分组为OwnerId
的每个值,ROW_NUMBER()
然后从每个新数据组的1开始计数。
更新:如果您要更新表格以设置SortOrder
列,请尝试以下操作:
;WITH OrderedData AS
(
SELECT
Id, OwnerId, Name,
ROW_NUMBER() OVER(PARTITION BY OwnerId ORDER BY Name, Id) AS 'RowNum'
FROM
dbo.YourTable
)
UPDATE OrderedData
SET SortOrder = RowNum
这应该将SortOrder
列设置为ROW_NUMBER()
函数返回的值