I think you need the aggregate to be a subquery for it return all results that you need. Not sure, but something like this:SELECT HubDetails.*, sub.*FROM( SELECT VTRCheckList.CLName ,Hub_Details.BranchName ,sum(cast(VTRCheckListDetails.VtrValue as int)) as Total FROM VTRCheckListDetails INNER JOIN VTRCheckList ON VTRCheckListDetails.CLid = VTRCheckList.CLid where Convert(date,VTRCheckListDetails.vtrRespDate, 105) >= convert(date,'01-01-2011',105) and Convert(date, VTRCheckListDetails.vtrRespDate, 105) <= convert(date,'30-01-2011',105) GROUP BY VTRCheckList.CLName, Hub_Details.BranchName ) sub CROSS JOIN Hub_Details
You could also perhaps do a left join from Hubdetails to do itSELECT HubDetails.BranchName ,sub.TotalFROM HubDetails LEFT JOIN( SELECT VTRCheckList.CLName ,Hub_Details.BranchID ,sum(cast(VTRCheckListDetails.VtrValue as int)) as Total FROM VTRCheckListDetails INNER JOIN VTRCheckList ON VTRCheckListDetails.CLid = VTRCheckList.CLid where Convert(date,VTRCheckListDetails.vtrRespDate, 105) >= convert(date,'01-01-2011',105) and Convert(date, VTRCheckListDetails.vtrRespDate, 105) <= convert(date,'30-01-2011',105) GROUP BY VTRCheckList.CLName, Hub_Details.BranchName ) sub ON HubDetails.BranchID = sub.BranchID
which would return all HubDetails records and only matching subquery records.
Poor planning on your part does not constitute an emergency on my part.