gpt4 book ai didi

sql - 使用 SQL 2008R2 对现有数据应用排序顺序

转载 作者:行者123 更新时间:2023-12-02 08:54:55 25 4
gpt4 key购买 nike

我有一些现有数据,需要根据几个因素应用“SortOrder”:

  1. 对于任何给定所有者,排序从“1”开始
  2. 按字母顺序应用排序(基本上遵循ORDER BY Name)以增加排序顺序。
  3. 如果两个项目具有相同的名称(如我在数据集中所示),我们可以将较低的排序顺序值应用于具有较低 ID 的项目。

以下是一些示例数据,可帮助说明我所讨论的内容:

我有:

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 (...) 的形式完成(如果更容易的话)将数据从一个表移动到下一个表。

最佳答案

简单 - 使用 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() 函数返回的值

关于sql - 使用 SQL 2008R2 对现有数据应用排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5686221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com