gpt4 book ai didi

sql - 与另一个表的最大值合并

转载 作者:行者123 更新时间:2023-12-04 09:41:57 24 4
gpt4 key购买 nike

我有两个表:
命运TablaBQ:
在 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),'');`

但我收到以下错误:

“聚合不能出现在 ON 子句中,除非它位于包含在 HAVING 子句或选择列表中的子查询中,并且被聚合的列是外部引用。”

关于如何使用合并来做到这一点的任何想法?或者我应该如何在没有合并的情况下做到这一点?

谢谢!!

最佳答案

你真的不需要 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)

关于sql - 与另一个表的最大值合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62292032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com