当前位置: 代码迷 >> Sql Server >> 怎么通过输入开始时间和结束时间输出update存储过程中两个表中时间最大值的状态字段
  详细解决方案

怎么通过输入开始时间和结束时间输出update存储过程中两个表中时间最大值的状态字段

热度:33   发布时间:2016-04-24 10:18:26.0
如何通过输入开始时间和结束时间输出update存储过程中两个表中时间最大值的状态字段
以下是一个存储过程的一部分是不完整的,希望高人指点一下。现在update一个临时表中一个字段,要求为临时表中的一个字段(人员编号)关联流水表中(执行力得分)一个字段(人员编号 )并通过输入的(开始时间和结束时间)以及人员编号相同为条件把所有关联数据中日期最大值的“执行力状态状态”放在临时表,如何写?


update #执行力查询Temp
set #执行力查询Temp.状态=执行力得分.执行力状态
from 执行力得分
where #执行力查询Temp.人员编号=执行力得分.人员编号 and  执行力得分.日期 between @beginDate and (Select top 1 执行力得分.日期 from 执行力得分 where 执行力得分.日期 between @beginDate and @endDate order by 日期 desc)



非常感谢!
------解决方案--------------------
可以用output子句实现,

-- 建临时表
create table #临时表(执行力状态 [数据类型])

update a
set a.状态=b.执行力状态
output inserted.执行力状态 into #临时表
from #执行力查询Temp a,执行力得分 b
where a.人员编号=b.人员编号 
and b.日期 between @beginDate 
and (Select top 1 日期 
     from 执行力得分 
     where 执行力得分.日期 between @beginDate and @endDate 
     order by 日期 desc)

-- 结果
select 执行力状态 from #临时表

-- 执行力状态最大值
select max(执行力状态) from #临时表

------解决方案--------------------
"inner join [执行力得分] as b on b.[人员编号]=b.[人员编号]"寫錯了,
update a 
set [状态]=b.[执行力状态]
from #执行力查询Temp as a 
inner join [执行力得分] as b on b.[人员编号]=a.[人员编号]
  and b.[日期]=(select max(x.[日期])
from [执行力得分] x 
where x.[人员编号]=b.[人员编号]
and x.[日期] between @beginDate and @endDate
)
  相关解决方案