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

标签 sql sql-server sql-update sql-order-by row-number

我是一个 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

感谢您的帮助

最佳答案

假设您使用的是 SQL Server 并且您的原始表已经有一个类似 SortOrder 的列,您可以从下面的 cte 中受益:

;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

如果还没有 SortOrder 列,您可以这样做:

ALTER TABLE DesignColours
ADD SortOrder int
GO

update语句的常规用法是:

UPDATE tablename
set columnName = yourvalue
where <yourrule>

引用:https://www.w3schools.com/sql/sql_update.asp

关于sql - 如何根据字母排序顺序设置 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49636856/

相关文章:

sql-server - SQLServer : Why avoid Table-Valued User Defined Functions?

sql-server - 将数据类型 DECIMAL 从 CSV 导入到 SQL Server

sql - Postgresql 更新左连接

SQL:ENUM 与一对多关系的优势?

sql - 是否可以撤消回滚?

java - iBatis 是动态 SQL 查询的正确选择吗?

php - 所有字段未填写后更新表单

mysql - 从存储过程输出 JOINS 的不同值

sql-server - 如何根据特殊字符串在列中的位置获取值

sql - 为什么更新触发器在 SQL Server 中进行舍入?