2013-02-19 26 views
1

我试图让得到的数据是 -SQL查询在多个表中SalesForce公司

的问题:“我想知道什么时候已经通过营销活动影响的机会与帐户相关联。可能有多个账户联系人
因此,如果任何联系人与某个活动(活动的成员)相关联 - 告诉我该(或那些)联系人连接到哪个账户, 以及是否有机会与帐户 相关联,并且如果存在与该帐户相关联的机会,则在联系人与该活动相关联之后创建商机“

我无法弄清楚逻辑。我是SQL新手。任何帮助将不胜感激。

我使用SQL Server 2012的

我要从Salesforce数据库5个相关表格 -

帐户表(PK ID,OpportunityID),机遇表(PK ID,帐户ID),联系表(PK ID,帐户ID),广告活动表(PK ID,使用ContactID,PARENTID),CampaignMember表(PK ID,使用ContactID,的CampaignID)

这个链接给出Salesforce的数据模型 http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_erd_majors.htm

这是我想到的,但它不返回任何行。

SELECT O.CreatedDate OppCreatedDate 
,o.Name as OpportunityName 
,a.Name AccountName 
,c.Name as ContactName 
,ca.Name as CampaignName 
,o.Amount_Software 
,o.CreatedDate 
FROM Opportunity o 
INNER JOIN Account a on a.Id = o.AccountID 
LEFT JOIN Contact c ON c.AccountId = a.Id 
INNER JOIN CampaignMember cm ON cm.CampaignID = c.ID 
INNER JOIN Campaign ca ON ca.ID = cm.CampaignID 
LEFT JOIN Campaign ca2 ON ca2.ID = ca.ParentID 
WHERE o.CreatedDate > cm.CreatedDate 
ORDER BY AccountName DESC; 

谢谢。

+2

你是怎么执行这个查询的? Salesforce拥有自己的数据库查询语言SOQL。除非您已将Salesforce的数据导入SQL Server,否则您编写的T-SQL将无法使用。 – 2013-02-19 21:32:45

+0

我可以连接SQL Server 2012到一个副本数据库。我可以使用SQL Server查询数据....我只是不知道如何编写它。 – BeRye 2013-02-19 21:53:39

回答

1

您在LEFT JOIN上运行INNER JOIN,这是不明确的。

机会< - >账号
账户 - >联系
活动成员< - >联系(这应该是一个左加入,因为上面的线)
活动成员< - >活动(这应该是左连接,因为线两以上)
活动 - >运动

视觉因为这是在这里(你不能内加入一个新表到左-j oined表):

GOOD:
INNER JOIN < - > INNER JOIN - > LEFT JOIN - > LEFT JOIN

BAD:
INNER JOIN < - > INNER JOIN - > LEFT JOIN - > INNER JOIN

+0

谢谢。好吧,我明白了,但我认为我仍然没有正确的查询结构。我希望获取帐户名称以及与该帐户关联的每个联系人,他们至少有一名联系人是Campaign成员;联系人所属的Campaign名称,以及是否存在与帐户关联的机会 - 机会名称。 – BeRye 2013-02-20 15:15:42

+0

在修复连接之前,您将不会返回任何数据。修复连接后,您可以进一步排除故障。 – Chains 2013-02-20 18:29:24

+0

我有查询。为了简单起见,我仅将数据限制在一个帐户中。我想我现在很接近。它正在返回我认为正确的数据,但我不确定。这是我现在拥有的。 – BeRye 2013-02-20 19:35:53