2014-11-12 2 views
1

Мне нужно обновить столбец рядом с ним после удаления пробелов в дате. Например, если первый эффективный период (1/4/2014-30/4/2014) и второй эффективный период (15/5/2014 - 31/5/2014), разрыв составляет 15 дней. Теперь мне нужно обновить первый эффективный до i.e 30/4/2014 до 1 даты до следующего эффективного с 1 года - 15/5/2014 = 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 значения. Это недопустимо, когда подзапрос следует =,! =, <, < =,>,> = или когда подзапрос используется как выражение.

+0

из-за подзапроса в любом –

+0

ваш стол выглядит так испорчен. a1000 diol a2 row имеет значение toDate Steam

+0

В приведенной выше таблице мы видим разрыв в датах, то есть для A1000 | Diol | a1 | Hospital of Hasmath | 100.00 | 50.00 | 2014-04-13 | 2014-04-29 есть две записи с разными эффектами. EffectiveTo. Между первым эффективным и вторым эффектом существует разрыв. т.е. между 2014-04-29 и 2014-04-31, поэтому мне нужно удалить этот пробел в 1 день и обновить предыдущую дату, которая составляет 2014-04-29 до 2014-04-30 –

ответ

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