【问题标题】:Fill new SQL column with rising integers with order by用顺序递增的整数填充新的 SQL 列
【发布时间】:2016-11-30 20:26:54
【问题描述】:

我已将整数行 SortNo 添加到现有 SQL 表中。

现在我想用增加 10(10、20、30,...)的整数填充新的 integerSortNo,但我希望行由另一个 nvarchar 列 @987654325 排序@。

我不能只使用更新,因为它会将SortNo 设置为随机顺序,而不是按Name 排序。

那么,我该如何填写由Name 订购的SortNo

【问题讨论】:

  • ROW_NUMBER() * 10 with an ORDER BY Name 这就是我的直觉

标签: sql sql-server


【解决方案1】:

您可以使用可更新的 CTE 和窗口函数来做到这一点:

with toupdate as (
      select t.*,
             row_number() over (order by [Name]) as seqnum
      from t
     )
update toupdate
    set sortno = 10 * seqnum;

【讨论】:

  • 我都试过了 - t 是表名。我在 [name] 中添加了括号,因为 name 是 SQL 中的关键字。
  • t 是表的名称。 toupdate 是 CTE。
【解决方案2】:

试试这个..

        UPDATE x
        SET x.[SortNo] = x.[SortNo]
        FROM (
              SELECT *, ROW_NUMBER() OVER (ORDER BY [Name]) * 10 AS [SortNo]
              FROM table     
              ) x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多