【发布时间】:2017-01-12 14:55:43
【问题描述】:
我有一个包含域之间电子邮件流量数据的临时表,如下所示:
[EmailId|SendingDomainId|SendingDomainName|RecipientDomainId|RecipientDomainName]
[500|600|abc.com|700|pqr.com]
[501|601|def.com|701|stu.com]
[501|601|def.com|700|pqr.com]
[502|600|abc.com|700|pqr.com]
即:
- 电子邮件 ID 500 已从 abc.com 发送到 pqr.com(1 个发件人,1 个收件人)
- 电子邮件 ID 501 已从 def.com 发送到 stu.com 和 pqr.com(1 个发件人,2 个收件人)
- 电子邮件 ID 502 已从 abc.com 发送到 pqr.com(1 个发件人,1 个收件人)
我正在尝试编制一份报告,其中包含域之间发送的电子邮件总数,以生成以下内容:
[SendingDomainId|SendingDomainName|RecipientDomainId|RecipientDomainName|Total]
[600|abc.com|700|pqr.com|2]
[601|def.com|701|stu.com|1]
[601|def.com|700|pqr.com|1]
我正在尝试这个MERGE 语句,但UPDATE 部分不起作用。我最终得到一个包含与源表相同行的最终表。
MERGE #DomainsChord_TrafficData as T
USING #DomainsChord_DomainEmails AS S
ON (S.SendingDomainId = T.SendingDomainId AND
S.RecipientDomainId = T.RecipientDomainId)
WHEN MATCHED THEN UPDATE
SET T.TotalEmails = T.TotalEmails+1
WHEN NOT MATCHED BY TARGET THEN
INSERT (SendingDomainId, SendingDomainName, RecipientDomainId,
RecipientDomainName, TotalEmails)
VALUES (S.SendingDomainId, S.SendingDomainName,
S.RecipientDomainId, S.RecipientDomainName, 1);
Table #DomainsChord_TrafficData 是合并前的空临时表。合并后,最终得到与源表相同的数据(#DomainsChord_DomainEmails)
有人能看出我哪里做错了吗?
提前致谢
【问题讨论】:
-
您根本不需要
MERGE。一个简单的SELECT GROUP BY就可以了。
标签: sql sql-server tsql merge