首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么保证批量更新得到的是:最后一次(结算日期最近的)的结算价格

2013-09-29 
如何保证批量更新得到的是:最后一次(结算日期最近的)的结算价格?update T_SthInStorage_ValueSet T_SthInS

如何保证批量更新得到的是:最后一次(结算日期最近的)的结算价格?
update T_SthInStorage_Value
Set T_SthInStorage_Value.原料最新价格=T_Invoice.价格
from T_SthInStorage_Value, T_Invoice
where T_SthInStorage_Value.仓库储存物ID=T_Invoice.仓库储存物ID

T_Invoice包含这些字段:仓库储存物ID,价格,开票年,开票月,开票日
T_SthInStorage_Value包含这些字段:仓库储存物ID,原料最新价格

如何保证批量更新得到的是:最后一次的结算价格?用视图或者建临时表也行。

现在好像也冇发现错,可是不保把啊,这只是因为一般来说时间近的输入晚,后更新。
可一个反例就...

我曾想用Order By来保障最后更新时间最近的,update和建立视图都 不让我用Order By!
Order By T_Invoice.仓库储存物ID
,T_Invoice.开票年
,T_Invoice.开票月
,T_Invoice.开票日
在关键字 'Order' 附近有语法错误。 批量更新得到的是?最后一次结算价格
[解决办法]
你的意思是更新T_SthInStorage_Value这个表的时间最近
还是获取T_Invoice这个表时间最近
[解决办法]
update T_SthInStorage_Value
Set T_SthInStorage_Value.原料最新价格=T_Invoice.价格
from T_SthInStorage_Value, (select * from T_Invoice Order By T_Invoice.仓库储存物ID
,T_Invoice.开票年
,T_Invoice.开票月
,T_Invoice.开票日) as T_Invoice
where T_SthInStorage_Value.仓库储存物ID=T_Invoice.仓库储存物ID
and 

[解决办法]

用个临时表转换下

select 仓库储存物ID,价格,时间 -- 这个时间,自己把你的开票年月日组合成这一个字段
into #tmp
from T_Invoice t 
where not exists(select 1 from T_Invoice where 仓库储存物ID=t.仓库储存物ID and 时间>t.时间)

update T_SthInStorage_Value
Set T_SthInStorage_Value.原料最新价格=#tmp.价格
from T_SthInStorage_Value, #tmp
where T_SthInStorage_Value.仓库储存物ID=#tmp.仓库储存物ID

热点排行