日期:2014-05-17  浏览次数:20461 次

请帮写一条SQL语句,能把我的数据修正过来【在线等待】
1.本来业务是这样的:案件分配的时候,根据案件的ID就会把之前分配过的给闭合,并且闭合日期和闭合人等于这次分配日期和分配人。
2.但是我之前分配的时候忘记闭合了,导致有些数据都没闭合,大哥帮我写一条SQL语句把下面的数据修正过来,
3.每一个案件ID只能有一条未闭合的数据,

求各位大神帮我修一条SQL语句可以修正我下面的数据。

创建表的代码
     create table #t_case_assign_log( ID int identity, 案件ID int, 分配日期 datetime, 分配人ID int, 闭合日期 datetime, 闭合人ID int,是否闭合 bit ) 
     go
     insert into #t_case_assign_log 
     select 8,'2010-4-2',10,'1900-1-1',0,0 union all
     select 8,'2010-5-2',12,'1900-1-1',0,0 union all
     select 8,'2010-7-12',10,'1900-1-1',0,0 union all
     select 9,'2010-4-2',10,'1900-1-1',0,0 union all
     select 9,'2010-4-2',12,'1900-1-1',0,0 union all
     select 10,'2010-4-2',10,'2010-5-4',0,0 union all
     select 8,'2010-8-2',10,'2010-8-4',14,1 union all
     select 8,'2010-8-4',14,'2010-9-1',12,1 union all
     select 9,'2010-8-4',10,'2010-8-9',8,1 union all
     select 10,'2010-8-5',10,'2010-9-4',8,1 union all
     select 8,'2010-9-1',12,'1900-1-1',0,0 union all
     select 9,'2010-8-9',8,'1900-1-1',0,0 union all
     select 10,'2010-9-4',8,'1900-1-1',0,0 
     go
     select *from #t_case_assign_log 


我现在的数据

------解决方案--------------------
第一步:;with cte as
(
select *,rn=ROW_NUMBER() over(partition by 案件ID order by 分配日期) from #t_case_assign_log 

select a.案件ID,a.分配日期,a.分配人ID,b.分配日期 as 闭合日期,b.分配人ID as 闭合人,
    case when b.分配日期 is not null then 1 else 0 end as 是否闭合 into #t
from cte a
left join cte b on a.rn+1=b.rn and a.案件ID=b.案件ID

第二步:
update #t_case_assign_log
set #t_case_assign_log.需要修改的列名=#t.对应列名 --我不知道你要更新哪些列,要更新的全部写上。
from #t_case_assign_log inner join #t on #t_case_assign_log.主键=#t.主键