使用旁边的列更新列

时间:2014-11-12 05:34:41

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

我需要在删除日期中的空白后用列旁边的列更新列。例如,如果第一个有效期为(1/4 / 2014-30 / 4/2014),第二个有效期为(2014年5月15日 - 2014年5月31日),则存在15天的差距。现在我需要在下一个有效期之前更新第一个有效期到2014年4月30日到1个日期,即1天 - 2014年5月15日= 14/5/2014。 表enter image description here

预期更新enter image description here

我尝试用这段代码得到结果,即

    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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

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