与另一个表的最大值合并

问题描述 投票:0回答:1

我有两个表:DestinyTablaBQ:在SourceTabla和其他数据中有一列具有PERIODO最大值的列,如下所示:

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

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

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

我需要使用源中的最大ANOMES值创建一个SQL,以将其插入或更新到DestinyTableBQ中。

我使用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),'');`

但是我收到以下错误:

“除非聚集在HAVING子句或选择列表中包含的子查询中,否则聚集不能出现在ON子句中,并且正在聚集的列是外部引用。”

关于如何使用合并来执行此操作的任何想法?还是不合并就应该怎么做?

谢谢!

sql sql-server sql-update sql-insert sql-server-2017
1个回答
1
投票

您实际上并不需要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)
    
© www.soinside.com 2019 - 2024. All rights reserved.