TSQL UPDATE基于其他表中的MAX(Date)

时间:2018-02-07 16:35:41

标签: sql-server tsql sql-update

我希望有人能帮我解决问题。我有2个表:供应商和付款。

供应商表包含供应商编号和表示帐户是否已启用的标记。

Supplier
--------
NUM
ENAFLG

然后我有一张付款表,显示供应商支付的所有款项,包括付款日期(ACCDAT)。

Payment
-------
SUPNUM
ACCDAT

我需要做的是,如果供应商的最后一笔付款是在2016年01月01日之前进行的,则会禁用供应商。这是我的,但我得到以下错误:

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 声明已经终止。

我需要能够传递多个值来更新Supplier表。

UPDATE dbo.SUPPLIER 
SET ENAFLG_0 = 1
WHERE NUM_0 = (SELECT pay.SUPNUM_0
               FROM dbo.PAYMENT AS pay
               JOIN dbo.SUPPLIER AS bps ON bps.NUM_0 = pay.SUPNUM_0
               GROUP BY pay.SUPNUM_0
               HAVING MAX(pay.ACCDAT_0) < '01/01/2016')

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

UPDATE dbo.SUPPLIER 
SET ENAFLG_0 = 1
WHERE NUM_0 in (select  pay.SUPNUM_0
                    from dbo.PAYMENT as pay
                    JOIN dbo.SUPPLIER as bps
                    on bps.NUM_0 =  pay.SUPNUM_0
                    GROUP BY pay.SUPNUM_0
                    Having MAX(pay.ACCDAT_0) < '01/01/2016'
                    )