代码之家  ›  专栏  ›  技术社区  ›  Andrew

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

  •  2
  • Andrew  · 技术社区  · 7 年前

    我是一个SQL noob,我需要语法帮助,了解如何使用SET命令分配排序器列的值。下面的代码不会更新该表,但它是我希望它的外观(所有排序器值都设置为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
    

    谢谢你的帮助

    2 回复  |  直到 7 年前
        1
  •  5
  •   Eray Balkanli    7 年前

    假设您使用的是SQL Server,并且您的原始表已经有一个类似排序器的列,那么您可以从下面这样的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
    

    如果尚未存在排序器列,则可以执行以下操作:

    ALTER TABLE DesignColours
    ADD SortOrder int
    GO
    

    update语句的常规用法是:

    UPDATE tablename
    set columnName = yourvalue
    where <yourrule>
    

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

        2
  •  4
  •   Daniel Marcus    7 年前
    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