2013-06-04 4 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에 추가 세일즈 포스 포럼이 : http://salesforce.stackexchange.com/이 – mast0r

답변

2

Account_vod__c이 계정 개체의 조회 인 경우 Account_vod__r.Name 등을 입력하여 계정에서 필드를 가져올 수 있습니다 ("c"대신 "r"및 점 사용).

이렇게 해보시겠습니까? 당신의 객체가없는 사람들을 위해 일해야

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 절의 내부 쿼리는 조정자 한도에 대한 두 번째 쿼리로 계산됩니다.

당신은 에이펙스를 사용하는 경우, 시도 : 그런데

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

2 일이 될 것' AggregateResult'는 작은 두통이 있습니다. – eyescream