I have two different lists. A list of opportunities and a list of sales (Umsatz__c), the accountid appears in both lists. How can I merge these lists into one finallist at account level? This list should
Opp List
AccName | ExpectedRevenue | Amount |
---|---|---|
A1 | 5000 | 10000 |
B2 | 500 | 250 |
A7 | 10 | 10 |
Sales List
AccName | BWS |
---|---|
A1 | 500 |
B5 | -100 |
H9 | 25 |
Final List
AccName | ExpectedRevenue | Amount | Sales |
---|---|---|---|
A1 | 5000 | 10000 | 500 |
B2 | 500 | 250 | 250 |
B5 | 00 | 00 | -100 |
A7 | 10 | 10 | 0 |
H9 | 0 | 0 | 25 |
CLASS
public class VTPv1 {
Public List<AggregateResult> OppGroup {get; set;}
Public List<AggregateResult> SalesGroup {get; set;}
public VTPv1() {
OppGroup = [SELECT Account.Name AccName, Sum(ExpectedRevenue) Rev, Sum(Amount) Fin FROM Opportunity WHERE OwnerId = '005b0000001UAm4AAG' AND CloseDate = THIS_YEAR AND (IsClosed = false OR IsWon = true) GROUP BY Account.Name];
SalesGroup = [SELECT Einzelrisiko__r.Gruppenvertrag__r.Unternehmen__r.Name AccName, Sum(BWS_Brutto__c) BWS FROM Umsatz__c WHERE Berater__r.Id = '005b0000001UAm4AAG' AND Bewertungsmonat__c = THIS_YEAR GROUP BY Einzelrisiko__r.Gruppenvertrag__r.Unternehmen__r.Name];
}
}
VISUAL PAGE
<apex:page controller="VTPv1">
<apex:pageBlock title="Opportunities Group">
<apex:pageBlockTable value="{!OppGroup}" var="oppg">
<apex:column value="{!oppg['AccName']}">
<apex:facet name="header">Account Name</apex:facet>
</apex:column>
<apex:column value="{!oppg['Rev']}">
<apex:facet name="header">Expected Revenue</apex:facet>
</apex:column>
<apex:column value="{!oppg['Fin']}">
<apex:facet name="header">Amount</apex:facet>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
<br/>
<apex:pageBlock title="Sales Group">
<apex:pageBlockTable value="{!SalesGroup}" var="salesg">
<apex:column value="{!salesg['AccName']}">
<apex:facet name="header">Account Name</apex:facet>
</apex:column>
<apex:column value="{!salesg['BWS']}">
<apex:facet name="header">Sales</apex:facet>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:page>
Update 22.10.21 I tried to create a new class with two maps, but I don't know how can I display the results at the visualforce page.
public class VTPv2 {
public String CombinedSummary { get; set; }
public VTPv2() {
}
Public class CombinedSummary {
public String AccName {get; set;}
public Decimal expectedRevenue {get; set;}
public Decimal amount {get; set;}
public Decimal BWS {get; set;}
Public CombinedSummary (AggregateResult OppAr, AggregateResult SalAr) {
AccName = (String) OppAr.get('AccName');
expectedRevenue = (Decimal) OppAr.get('expectedRevenue');
amount = (Decimal) SalAr.get('amount');
BWS = (Decimal) SalAr.get('BWS');
}
}
Public List<CombinedSummary> generateWrappers() {
List<CombinedSummary> combinedSummaries = new List<CombinedSummary>();
Map<Id, AggregateResult> OppGroup = new Map<Id, AggregateResult>();
for(AggregateResult OppAr :[SELECT Account.Name AccName, Sum(ExpectedRevenue) Rev, Sum(Amount) Fin FROM Opportunity WHERE OwnerId = '005b0000001UAm4AAG' AND CloseDate = THIS_YEAR AND (IsClosed = false OR IsWon = true) GROUP BY Account.Id, Account.Name]) {
OppGroup.put((Id)OppAr.get('Id'), OppAr);
}
Map<Id, AggregateResult> SalGroup = new Map <Id, AggregateResult>();
for(AggregateResult SalAr :[SELECT Einzelrisiko__r.Gruppenvertrag__r.Unternehmen__r.Name AccName, Sum(BWS_Brutto__c) BWS FROM Umsatz__c WHERE Berater__r.Id = '005b0000001UAm4AAG' AND Bewertungsmonat__c = THIS_YEAR GROUP BY Einzelrisiko__r.Gruppenvertrag__r.Unternehmen__r.Id, Einzelrisiko__r.Gruppenvertrag__r.Unternehmen__r.Name]) {
SalGroup.put((Id)SalAr.get('Einzelrisiko__r.Gruppenvertrag__r.Unternehmen__r.Id'), SalAr);
}
Set<Id> AccSet = new Set<Id>();
AccSet = SalGroup.keySet();
AccSet.addAll(SalGroup.keySet());
FOR (Id Id : AccSet) {
combinedSummaries.add(new CombinedSummary(OppGroup.get(Id), SalGroup.get(Id)));
}
Return combinedSummaries;
}
}
Map<String, AggregateResult>
to tie the two queries together based on Account Name. Example: salesforce.stackexchange.com/questions/126017/…