与另一个表的最大值合并

ukdjmx9f  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(274)

我有两个表:destinytableabq:在sourcetabla和其他数据中有一个最大值为periodo的列,如下所示:

PERIODO    DATE 
    202001     01/01/2020
    202002     01/01/2020
    202003     01/01/2020
    202004     01/01/2020

还有一个源表,它有几百万条这样的记录:

ANOMES
    202001
    202001
    202001
    202002
    ...
    202005    --> Missed in the DestinyTablaBQ table, Needs to be inserted or updated`

我需要创建一个sql来插入或更新destinytablebq,使用来自源的max anomes值。
我使用merge创建了以下sql:

MERGE [dbo].[DestinyTableBQ] BQ USING SourceTable T
    ON 
    BQ.PERIODO=MAX(T.ANOMES)
    WHEN NOT MATCHED
        THEN 
        INSERT (PERIODO,Date) 
        VALUES(MAX(T.ANOMES),'');`

但我得到了以下错误:
聚合不能出现在on子句中,除非它在having子句或select列表中包含的子查询中,并且被聚合的列是外部引用
你知道我怎么用合并来做这个吗?或者不合并我该怎么做?
谢谢!!

ktca8awb

ktca8awb1#

你真的不需要 merge 语法,因为您所要做的就是插入一个不存在的值。我想用这种方式表达会更简单 insert ... select ... where not exists :

insert into DestinyTablaBQ (periodo)
select s.max_anomes
from (select max(anomes) max_anomes from sourceTable) s
where not exists (
    select 1 from DestinyTablaBQ bq where bq.periodo = s.max_anomes
)

如果你想使用 merge 查询时,首先需要在子查询中进行聚合:

merge DestinyTableBQ bq
using (select max(anomes) max_anomes from sourceTable) s
on (bq.periodo = s.max_anomes)
when not matched then insert (periodo) values(s.max_anomes)

相关问题