我需要根据日期和列值更新表中的后续行,而不使用SQL Server 2008 R2中的游标

时间:2014-03-10 22:51:01

标签: sql sql-server sql-server-2008-r2

此SQL显示我正在使用的示例数据集

create table #tmp1
(
    Account varchar(18),
    CaseID varchar(18),
    DT datetime,
    Person varchar(100),
    Updated varchar(18)
)

insert into #tmp1    Select 'MyAcccount',  '12345', '1/1/13', 'me', 'Someone'
insert into #tmp1    Select 'MyAcccount',  '12346', '2/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12347', '3/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12348', '4/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12349', '5/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12350', '6/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12351', '7/1/13', 'myself', 'Someone'
insert into #tmp1    Select 'MyAcccount',  '12352', '8/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12353', '9/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12354', '10/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12355', '11/1/13', 'I', 'Someone'
insert into #tmp1    Select 'MyAcccount',  '12356', '12/1/13', null, null
insert into #tmp1    Select 'MyAcccount',  '12357', '1/1/14', 'Irene', 'Someone'
insert into #tmp1    Select 'MyAcccount',  '12358', '2/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12359', '3/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12360', '4/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12361', '5/1/14', 'Olivia', 'Someone'
insert into #tmp1    Select 'MyAcccount',  '12362', '6/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12363', '7/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12364', '8/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12365', '9/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12366', '10/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12367', '11/1/14', null, null
insert into #tmp1    Select 'MyAcccount',  '12368', '12/1/14', 'izzy', 'Someone'

select * from #tmp1
Order by Account, DT

我需要做的是更新Person列中具有空值的每一行中的Updated列,使其与前一行匹配,而不管{{{ 1}}列。

但是我被要求不使用光标。我一直试图找到一种没有光标的方法,但到目前为止还不是很成功。

有没有人能够在没有光标的情况下做这样的事情?

2 个答案:

答案 0 :(得分:0)

你可以这样做,假设你的id是唯一的,顺序无差距的:

UPDATE #tmp1
SET Person = (SELECT Person FROM #tmp T2 WHERE T1.CaseID = T2.CaseID + 1)
FROM #tmp T1

答案 1 :(得分:0)

 UPDATE #TMP1
 SET person =<value> or (select updated from #tmp1) 
 WHERE updated = NULL

如果要在字段内的值中键入任何默认值。如果要更新列的对应值,请使用子查询。

相关问题