我需要在删除日期中的空白后用列旁边的列更新列。例如,如果第一个有效期为(1/4 / 2014-30 / 4/2014),第二个有效期为(2014年5月15日 - 2014年5月31日),则存在15天的差距。现在我需要在下一个有效期之前更新第一个有效期到2014年4月30日到1个日期,即1天 - 2014年5月15日= 14/5/2014。 表
预期更新
我尝试用这段代码得到结果,即
Update ItemHospitalMapping
Set EffectiveTo = (select DATEADD(dd,-1,A.EffectiveFrom)
from ItemHospitalMapping as a join ItemHospitalMapping as B
on a.NameOfHospital=B.NameOfHospital
and a.NameOfItem=B.NameOfItem
Where a.EffectiveTo >B.EffectiveTo)
where NameOfHospital=any(select a.NameOfHospital
from ItemHospitalMapping as a join ItemHospitalMapping as B
on a.NameOfHospital=B.NameOfHospital and a.NameOfItem=B.NameOfItem
Where a.EffectiveTo >B.EffectiveTo) and
EffectiveTo=any(select B.EffectiveTo
from ItemHospitalMapping as a join ItemHospitalMapping as B
on a.NameOfHospital=B.NameOfHospital and a.NameOfItem=B.NameOfItem
Where a.EffectiveTo >B.EffectiveTo)
但是还没有成功返回单行进行更新。我得到的错误是Subquery返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
答案 0 :(得分:0)
感谢您贡献宝贵的时间。我一直在尝试解决这个问题很长一段时间,碰巧用下面的代码来解决问题。
Update B
Set B.EffectiveTo = DATEADD(dd,-1,a.EffectiveFrom)
from ItemHospitalMapping as a join ItemHospitalMapping as B
on a.NameOfHospital=B.NameOfHospital and a.NameOfItem=B.NameOfItem
Where a.EffectiveTo >B.EffectiveTo