我有两个表: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子句中,并且正在聚集的列是外部引用。”
关于如何使用合并来执行此操作的任何想法?还是不合并就应该怎么做?
谢谢!
您实际上并不需要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)