从同一张表中

时间:2017-02-08 20:44:32

标签: sql sql-server

我需要更新名为" 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语句的集合列表中#34;

我知道我在这里缺少一些简单的东西。

我也知道FirstPayment字段不是必需的,因为我可以在查询中获取该日期,但我提供此数据的应用程序在本专栏中也需要它。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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,但也可能有效。