如何根据字母排序顺序设置 int 值

And*_*rew 3 sql sql-server row-number sql-order-by sql-update

我是一个 SQL 菜鸟,我需要有关如何使用 SET 命令来分配 SortOrder 列的值的语法帮助。下面的代码不会更新表格,但它是我希望的样子(所有 SortOrder 值都设置为 0)。我可以手动进行,但寻找一种快速的替代方案(数据集有点大)。

Select ROW_NUMBER() OVER (ORDER BY Name ASC) AS SortOrder, Name
From DesignColours

SortOrder |Name
1          Beige
2          Black
3          Blue
4          Brown
5          Copper
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

Era*_*nli 5

您可以从如下所示的 cte 中受益,假设您正在使用 SQL Server 并且您的原始表已经具有像 SortOrder 这样的列:

;with cte (SortOrder, Name) as (
   Select ROW_NUMBER() OVER (ORDER BY Name ASC) AS SortOrder, Name
   From DesignColours
)
update d
set d.SortOrder = cte.SortOrder
from DesignColours d
inner join cte on d.Name = cte.Name
Run Code Online (Sandbox Code Playgroud)

如果不存在 SortOrder 列,您可以执行以下操作:

ALTER TABLE DesignColours
ADD SortOrder int
GO
Run Code Online (Sandbox Code Playgroud)

update语句的常规用法是:

UPDATE tablename
set columnName = yourvalue
where <yourrule>
Run Code Online (Sandbox Code Playgroud)

参考:https: //www.w3schools.com/sql/sql_update.asp


Dan*_*cus 5

update a
set a.SortOrder = b.SortOrder
from DesignColours a
join 
(Select ROW_NUMBER() OVER (ORDER BY Name ASC) AS SortOrder, Name
   From DesignColours)b
on a.Name = b.Name
Run Code Online (Sandbox Code Playgroud)