Below is some example code to allow you to do this. It is only basic skeleton code and you may want to improve it using a wrapper class for the object rather than the maps, but it is a brief functional piece. In general code solutions like this are not posted on the exchange.
You controller would be something like:
public with sharing class SalesRevenueController
{
public Map<String, Map<String, Decimal>> salesRevenueDetails {get; set;}
public SalesRevenueController()
{
salesRevenueDetails = new Map<String, Map<String, Decimal>>();
List<AggregateResult> results = [SELECT SUM(Sales_Revenue__c), Sales_Rep__c, Month__c FROM SalesRevSummary__c GROUP BY Sales_Rep__c, Month__c];
for(AggregateResult result : results)
{
if(salesRevenueDetails.get((String)result.get('Sales_Rep__c')) == null)
{
salesRevenueDetails.put((String)result.get('Sales_Rep__c'), new Map<String, Decimal>());
}
salesRevenueDetails.get((String)result.get('Sales_Rep__c')).put((String)result.get('Month__c'),(Decimal)result.get('expr0'));
}
}
}
And your page would need to build upon this:
<apex:page controller="SalesRevenueController">
<apex:repeat value="{!salesRevenueDetails}" var="rep">
<b>Sales Rep: {!rep}</b>
<br />
<apex:repeat value="{!salesRevenueDetails[rep]}" var="month">
Month: {!month}
<br />
Total Revenue: {!salesRevenueDetails[rep][month]}
<br/>
</apex:repeat>
</apex:repeat>
</apex:page>
The controller queries the object and uses aggregate functions with grouping to provide a series of aggregate result objects that we can loop through and place into a map for use later on (I use a map here because it is a standard primitive. As mentioned above a wrapper class may have been a better idea but is not used here to make the code easier for you to use).
Using this map we set up a pair of apex:repeat tags which loop through the map to display the items as needed. This setup can be easily styled as required to provide a better look and feel for your users. You will need to add testing for this to deploy it to a production environment.