2017-02-08 4 views
0

Мне нужно обновить поле «FirstPayment» с датой из другого поля в той же таблице.Столбец с датой даты от другой даты в другой колонке в той же таблице

Вот код:

UPDATE R1 
SET R1.FirstPayment = (select min(r1.effective_date) where R1.amount>0) 
from CTTC_RentalCarPayments R1, CTTC_RentalCarPayments R2 
where r1.id=r2.id 

Это приводит к «Агрегат может не отображаться в списке установленного в UPDATE заявление»

Я знаю, что я что-то отсутствует простой здесь.

Я также знаю, что поле FirstPayment не обязательно, потому что я мог получить эту дату в запросе, но приложение, которое я кормлю этими данными, тоже нуждается в этом в этой колонке.

+0

Уверены ли вы в своих фигурных скобках и табличных псевдонимах? Операторы 'UPDATE' не содержат' FROM'-part ... –

ответ

1

Используйте функции окна:

with toupdate as (
     select r.*, 
      min(case when r1.amount > 0 then r.effective_date end) over (partition by id) as new_effective_date 
     from CTTC_RentalCarPayments r 
    ) 
update toupdate 
    set FirstPayment = new_effective_date; 
0

Вы можете установить значение поля, которое вы хотите получить в переменную, а затем обновить поле для этой переменной:

Declare @firstPayment datetime; 
Set @firstPayment = (select min(r1.effective_date) from r1 where R1.amount>0); 
Declare @firstPaymentID int; 
Set @firstPaymentID = (select id from r1 where @firstPayment = FirstPayment); 

UPDATE r1 
SET FirstPayment = @firstPayment where Id = @firstPaymentID; 

Позвольте мне знать, если это помогает. Это не рекурсивный CTE, но он тоже может работать.

Смежные вопросы