【问题标题】:Update in an Order By series按顺序更新系列
【发布时间】:2012-05-21 18:31:46
【问题描述】:

我需要对ORDER BY 系列中的多条记录运行UPDATE 语句。这是因为我的更新包含一个标量函数,它使用早期更新的值。任何人都可以提出更好的方法而不是按所需顺序循环


对不起,我应该早点做的,情景是..

我的问题是我有一个表变量,它有分层记录,

ID SlNo 结果

1 1.0 正确

2 1.1 正确

3 1.1.1 真

4 1.1.2 错误

5 1.2 正确

6 1.2.1 错误

7 1.2.2 错误

8 1.2.3 错误

9 1.2.4 错误

而树结构是,

1.0

1.0 > 1.1

1.0 > 1.1 > 1.1.1

1.0 > 1.1 > 1.1.2

1.0 > 1.2

1.0 > 1.2 > 2.2.1

1.0 > 1.2 > 2.2.2

1.0 > 1.2 > 2.2.3

1.0 > 1.2 > 2.2.4

我想将结果更新到一个表中,如果所有子分支都是“False”,那么它的父分支应该是“False”。为此,我需要更新“降序”中的行,并且还必须看到它的所有子分支都是“False”。我可以在一个更新语句中做到这一点吗?如何在“我的更新查询”中说“订购依据”?

【问题讨论】:

  • 你能展示一些表格结构吗?
  • 您可以在 SELECT 语句中计算新值,然后使用结果集更新真实表。
  • 究竟应该根据什么来更新?请不要仅在评论中回复,而是更新您的问题(帖子正文下方有一个edit 链接)。
  • 非常抱歉,我迟到了。

标签: sql sql-server sql-server-2008 sql-server-2005


【解决方案1】:

编写一个查询,使用选择生成您想要的值。此查询可能会使用 row_number() 函数来确保排序。

然后,使用此查询进行更新。

举个简单的例子,如果你想将一列更新为表的序列号,其中顺序由 col1 指定,那么你可以这样做:

select t.*, row_number() over (partition by NULL order by col1) as seqnum
from table t

现在把这个放到更新中:

with newvals (select t.*,
                     row_number() over (partition by NULL order by col1) as seqnum
              from table t
             )
update table
    set column = seqnum
from t
where t.id = table.id

【讨论】:

    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多