使用UPDATE插入SELECT语句返回的值

时间:2014-02-21 17:41:38

标签: sql sql-server

我有一个表,我想用上一行中另一列中的值更新列。

我想做这样的事情。

UPDATE myTable as b SET prev=(SELECT top 1 myField FROM myTable 
WHERE rowID<b.rowID ORDER By rowID Desc)

有什么想法吗?

注意:我正在使用Access / SQL服务器。我收到错误'操作必须使用可更新的查询'。

注意2:How do I UPDATE from a SELECT in SQL Server?的解决方案无效。

2 个答案:

答案 0 :(得分:0)

你可以通过LAG()分析函数的组合来计算前一行的值和UPDATE(这里,我使用MERGE语句)来实现这一点:

MERGE INTO mytable as target using (
  select 
    t.id,
    lag(field1) over (partition by null order by id) new_prev_field
  from mytable t
) as src (id, new_prev_field)
on (target.id = src.id)
when matched 
then update
  set prev_field1 = src.new_prev_field;

SQL Fiddle

答案 1 :(得分:-1)

使用Max()

而不是Top
UPDATE myTable as b 
SET prev = (
  SELECT max(rowID)
  FROM myTable 
  WHERE rowID < b.rowID)