如何根据字母排序顺序设置 int 值
How to set an int value depending on alphabetical sort order
我是一个 SQL 菜鸟,我需要有关如何使用 SET 命令分配我的 SortOrder 列的值的语法帮助。下面的代码不会更新 table 但这是我希望它看起来的样子(所有 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 服务器并且您的原始 table 已经有像 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 tablename
set columnName = yourvalue
where <yourrule>
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
我是一个 SQL 菜鸟,我需要有关如何使用 SET 命令分配我的 SortOrder 列的值的语法帮助。下面的代码不会更新 table 但这是我希望它看起来的样子(所有 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 服务器并且您的原始 table 已经有像 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 tablename
set columnName = yourvalue
where <yourrule>
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