0

我正在尝试编写一个 sql 脚本,该脚本将使用递增的数字更新列,但在文档# 的更改中重置数字。如果可能的话,我希望它增加 10 的计数。Line No 是我要更新的列。

Document # ---- Line No
10001             10
10001             20
10001             30
20001             10
20001             20
30001             10
30001             20

谢谢你。

编辑:

with dbo.[Staging_External Sales Line] as (
    select t.*, 
        10 * row_number() over (partition by [Document No_] order by [Item No_] asc) as val
  from [Staging_External Sales Line] t
 )
update dbo.[Staging_External Sales Line]
    set [Line no_] = val;
4

1 回答 1

1

SQL 表本质上是无序的。因此,对于给定的文档,没有第一行、第二行或其他任何东西。您需要将该信息存储在列中,例如 id 或创建日期。

以下查询进行计算:

select Document,
       10 * row_number() over (partition by Document order by (select NULL)) as val
from t;

您应该将 替换为(select NULL)真正具有排序的列。

要进行更新,您可以使用 CTE:

with toupdate as (
          select Document,
                 10 * row_number() over (partition by Document order by (select NULL)) as val
          from t
         )
update toupdate
    set line_num = val;

编辑:

最好编辑您的原始问题,而不是在评论中嵌入 SQL。

Onw 问题是您不能对别名使用多部分命名约定(我使用t相当广泛,可能过于广泛)。第二个是您不希望order by子句中有嵌套的选择。这是您问题的修订版。

select [Document No_],
       10 * row_number() over (partition by [Document No_] order by [Sort Order]) as val
from dbo.[Staging_External Sales Line] t;

和:

with toupdate as (
  select t.*,
         10 * row_number() over (partition by [Document No_] order by [Sort Order]) as val
  from dbo.[Staging_External Sales Line] t
 )
update toupdate
    set [Line no_] = val;
于 2013-07-29T18:15:54.690 回答