2013-06-04 132 views
0

我是一个关于SOQL的初学者,希望你能帮助我。 我想这两个查询组合:结合两个SOQL查询

查询1:

SELECT Id, Category__c, Segment__c 
FROM Account 
WHERE (Category__c = 'Prospect' AND Segment__c = 'High') OR (Category__c = 'Referrer' AND Segment__c = 'High') 

查询2:

SELECT Account_vod__c, WEEK_IN_YEAR(Call_Date_vod__c), CALENDAR_YEAR(Call_Date_vod__c) 
FROM Call2_vod__c 
WHERE Call_Date_vod__c = LAST_N_WEEKS:7 
GROUP BY Account_vod__c, Call_Date_vod__c 

其中帐户的ID应该等于从Call2_vod__c的Account_vod__c值。

当我结合这些,我得到的东西如:

组合查询:

SELECT Id, Category__c, Segment__c 
FROM Account 
WHERE id in (select Account_vod__c from Call2_vod__c where Call_Date_vod__c = LAST_N_WEEKS:7) AND ((Category__c = 'Prospect' AND Segment__c = 'High') OR (Category__c = 'Referrer' AND Segment__c = 'High')) 

但现在我很想念周和年值:

WEEK_IN_YEAR(Call_Date_vod__c), CALENDAR_YEAR(Call_Date_vod__c) 

这部分: GROUP BY Account_vod__c,Call_Date_vod__c

如何合并这些查询并显示正确的星期和日历数据?

谢谢!

+0

顺便说一句,上有Stackexchange一个额外的Salesforce论坛:http://salesforce.stackexchange.com/ – mast0r

回答

2

如果您的Account_vod__c是Account对象的查找,您可以通过键入Account_vod__r.Name etc(使用“r”而不是“c”并使用点)来从Account中获取字段。

那么尝试这样的事情?

SELECT Account_vod__c, Account_vod__r.Category__c, Account_vod__r.Segment__c, WEEK_IN_YEAR(Call_Date_vod__c), CALENDAR_YEAR(Call_Date_vod__c) 
FROM Call2_vod__c 
WHERE Call_Date_vod__c = LAST_N_WEEKS:7 
GROUP BY Account_vod__c, Account_vod__r.Category__c, Account_vod__r.Segment__c, WEEK_IN_YEAR(Call_Date_vod__c), CALENDAR_YEAR(Call_Date_vod__c) 

类似的一个应该对每个人都有谁没有你的对象:

SELECT AccountId, Account.Name, COUNT(Id) countOfContactsCreatedThatWeek, WEEK_IN_YEAR(CreatedDate) week, CALENDAR_YEAR(CreatedDate) year 
FROM Contact 
GROUP BY AccountId, Account.Name, WEEK_IN_YEAR(CreatedDate), CALENDAR_YEAR(CreatedDate) 
0

如果你确定使用两个查询,我将开始与。在你的组合版本中,无论如何你都会在技术上调用两个查询。 where子句中的内部查询被视为对照州长限制的第二个查询。

如果您使用Apex的尝试:

Map<Id, Account> aMap = new Map<Id, Account>([SELECT Id, Category__c, Segment__c 
FROM Account 
WHERE (Category__c = 'Prospect' AND Segment__c = 'High') OR (Category__c = 'Referrer' AND Segment__c = 'High')]); 

List<Call2_vod__c> callList = [SELECT Account_vod__c, WEEK_IN_YEAR(Call_Date_vod__c), CALENDAR_YEAR(Call_Date_vod__c) 
FROM Call2_vod__c 
WHERE Call_Date_vod__c = LAST_N_WEEKS:7 and Id in :aMap.keySet() 
GROUP BY Account_vod__c, Call_Date_vod__c]; 
+0

:第二个将是一个' AggregateResult'和它自己的一套轻微头痛。 – eyescream