仅更新sql server中的前1行

时间:2015-09-19 08:29:24

标签: sql sql-server tsql

我有一张表格如下:

enter image description here

如您所见,列officebudge已更新为所有单个办事处的值。我希望update只发生在前1个办公室 如下所示:

enter image description here

任何更新前1名记录的建议? 我使用下面的代码。但它会更新所有办公室条目:

UPDATE budget
  SET   officebudge = ISNULL(ProjectedReturnCount,0)
  FROM analyticsdata
  join
  (
  select   ofc.officeid,ofc.week,
  max(ISNULL(ofc.ProjectedReturnCount,0)) ProjectedReturnCount
  from
  BudgetOffice ofc
  INNER JOIN budget anal
  on ofc.OfficeID = anal.OfficeID
  and ofc.Week      = anal.week
  and ofc.RowStatus = 'a' 
  group by ofc.OfficeID,ofc.week
  )z
  on (z.officeid = budget.OfficeID
  and z.Week    = budget .week )

感谢您的帮助。我附上了一个sql小提琴来证明这一点。

http://sqlfiddle.com/#!3/a2b32/7

2 个答案:

答案 0 :(得分:1)

您可以像这样使用CTE(我只使用了几个您提供的列)

;With cte As
(Select *, Row_Number() Over(Partition By OfficeID order by RowID) As rn
From Employee)

update cte set OfficeBudge = 0 where rn>1

select * from Employee

找到附带的小提琴 的 sql fiddle demo

答案 1 :(得分:0)

您可以使用cte(公用表表达式)实现您想要的

https://msdn.microsoft.com/en-us/library/ms186734.aspx

查看上面链接的B项。