我有两张桌子
共享primarymembercustomerid。电子邮件联系历史记录有三个字段:
和服务地点表有三个字段
为电子邮件活动选择了primarymembercustomerids,然后如果他们走进我们的某个分支机构并接收服务,它们将显示在“服务地点”表中。我想计算邮寄的主要会员客户ID的数量,并且紧挨着它我希望有一个主要会员客户的数量显示给分支机构。
到目前为止我所拥有的:
select
ch.campaigncode,
pos.serviceshortdesc,
count(ch.primarymembercustomerid),
count(pos.primarymembercustomerid)
from mktprodvm.cdmv_prmmbr_contacthist_email ch
right outer join mktprodvm.cdmv_pos pos on ch.primarymembercustomerid = pos.primarymembercustomerid
where ch.campaigncode = 'EDT_ALLACMO'
and pos.servicedate between '2017-02-01' and '2017-02-28'
group by 1,2
我最终得到的是在这段时间内走进分支的主要成员的计数,但我没有得到通过电子邮件发送的主要成员的总数。我认为通过做一个正确的外连接,我会得到邮寄的主要成员的总数,但它对我不起作用。我觉得我需要做一些子查询或相关子查询,但我已经准备好如何使用它们,我认为这是不对的。我以前从未使用过它们并且说实话我也不是那么优秀的SQL编码器。谢谢你的帮助!
答案 0 :(得分:0)
因为我在这个网站上的声誉很低,所以我无法评论,所以我写这个作为答案。
我认为你使用了错误的连接类型(或者以错误的顺序写表)。如果您不想丢失主表的行,即电子邮件联系历史记录,则必须执行LEFT JOIN
而不是RIGHT JOIN
。
此外,我不知道是否可能,但我猜测primarymembercustomerid
可以有多个服务,而且由于您选择的是serviceshortdesc
,因此单个电子邮件可能会计入您的anwerset的不同行和总数将不准确。根据你所说的你想要的,我没有看到在SELECT中包含服务描述的原因。