通过Teradata

时间:2017-03-13 19:09:12

标签: sql teradata

我有两张桌子

  • 电子邮件联系历史记录
  • 服务地点

共享primarymembercustomerid。电子邮件联系历史记录有三个字段:

  • Campaigncode
  • Primarymembercustomerid
  • MAILDATE

和服务地点表有三个字段

  • primarymembercustomerid
  • servicedate
  • serviceshortDesc

为电子邮件活动选择了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编码器。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

因为我在这个网站上的声誉很低,所以我无法评论,所以我写这个作为答案。

我认为你使用了错误的连接类型(或者以错误的顺序写表)。如果您不想丢失主表的行,即电子邮件联系历史记录,则必须执行LEFT JOIN而不是RIGHT JOIN

此外,我不知道是否可能,但我猜测primarymembercustomerid可以有多个服务,而且由于您选择的是serviceshortdesc,因此单个电子邮件可能会计入您的anwerset的不同行和总数将不准确。根据你所说的你想要的,我没有看到在SELECT中包含服务描述的原因。