I think there are 2 ways you can do this:
1) Create nested tables like:
<apex:page tabstyle="Account" controller="nestedqueryexample">
<apex:pageblock>
<apex:pageblocktable value="{!accsandtmember}" var="accdet">
<apex:column >
<apex:facet name="header">
Team Members
</apex:facet>
<apex:pageblocktable value="{!accdet.AccountTeamMembers}" var="tm">
<apex:column headerValue="Team Member">
<apex:outputfield value="{!tm.User.Name}"/>
</apex:column>
<apex:column headerValue="Role">
<apex:outputfield value="{!tm.TeamMemberRole}"/>
</apex:column>
</apex:pageblocktable>
</apex:column>
<apex:column headervalue="Account Name">
<apex:outputtext value="{!accdet.Name}"/>
</apex:column>
<apex:column headervalue="Billing Country">
<apex:outputtext value="{!accdet.BillingCountry}"/>
</apex:column>
</apex:pageblocktable>
</apex:pageblock>
</apex:page>
Where class is like:
public class nestedqueryexample
{
public List<Account> getaccsandtmember()
{
List<Account> accounts = [Select Id,(Select TeamMemberRole, User.Name From Account.AccountTeamMembers), Name, BillingCountry from Account];
return accounts;
}
}
Important thing to note is how value="{!accdet.AccountTeamMembers}" var="tm" is used to loop over the nested records
2) Second option is to create wrapper class that have all the field from child and parent object. Store your data into list of objects of wrapper class. And then use it in your table.
for ex: take a look at this http://www.sfdcpoint.com/salesforce/wrapper-class-in-apex/
Here we have wrapper class that holds 2 things 1 account object 2 Boolean status
In your wrapper class you can hold both objects.