2

我有一个具有重复电子邮件地址的表,我需要将其中一个与其他两个字段一起插入到一个临时表中。这里有很多例子,但我可以让其中任何一个工作,

我最终调查了 MERGE 我得到了相同的结果。所有的记录都被插入我迷路了。我尝试了许多不同的样本,但它总是插入所有记录。我回去确保电子邮件地址真的是骗子,他们是......下面是我现在......

MERGE #EmailTable2 AS Target
USING (SELECT EMAIL, NAME, JOB_TITLE FROM b2b_cmas_list$ WHERE EMAIL IS NOT NULL) AS Source
ON (Target.EMAIL = Source.EMAIL)
 WHEN NOT MATCHED BY TARGET THEN
    INSERT (EMAIL, NAME, JOB_TITLE)
    VALUES (Source.EMAIL, Source.NAME, Source.JOB_TITLE)

OUTPUT $action, inserted.*, deleted.*;

因此,任何有助于正确解决此问题的帮助都会有所帮助。

4

1 回答 1

1

这不起作用,因为 SQL 不知道要选择包含相同电子邮件的两行中的哪一行。我的意思是:如果 EMAIL 相同,那么(NAME 和 JOB_TITLE)对中的哪一个是重要的,哪一个可以丢弃?

一些提示:

  1. 如果选择哪个项目并不重要,只需通过 EMAIL 选择 MAX(NAME) 和 MAX(JOB_TITLE) 进行分组,即

    按 EMAIL 从 b2b_cmas_list$ 组中选择 EMAIL、max(NAME)、max(JOB_TITLE)

    但是请注意,这可能会破坏 NAME-JOB_TITLE 对(因为选择了 max)。

  2. 尝试使用 ROW_NUMBER() OVER() 任意选择每组中的第一行。

  3. 使用 CURSOR 遍历行并跳过重复项。

  4. 使用 .NET CLR 聚合来连接同一电子邮件的名称和职位。

还有一点注意你的 MERGE 声明。这没有按预期工作,因为 SQL 一次检查所有行,而不是逐行检查。因此,如果一封电子邮件不是这样。IE。"a@a.com" 被插入,然后另一个不会。仅当“a@a.com”位于语句开头的表格中时才重要。

于 2012-06-28T19:41:34.123 回答