Strictly seen, this is a duplicate question. Those should be avoided; if there a valid answers, the questions are not allowed to sum up to more than 500 points alltogether. However, I reckon the approaches are that different that we can pass, as an exception.
My solution took that long because Access is very, very delicate about the SQL syntax, not allowing for alternative notations. It made me doubt on my own SQL knowledge :(
However, this is my solution, which is similar, but not the same:
select GrpName, count(CCon) as Cnt
from (
select GrpName, 0 as CCon
from tblGrpNames inner join blMain
on tblGrpNames.Grp=tblMain.GroupID and tblGrpNames.Course=tblMain.CourseID
where nz(tblMain.CCon, 'No') = 'No'
and Appdate Between forms!frmReportDateRange!BeginDate
and forms!frmReportDateRange!EndDate
union all
select distinct GrpName, 1 as cnt
from tblGrpNames inner join blMain
on tblGrpNames.Grp=tblMain.GroupID and tblGrpNames.Course=tblMain.CourseID
where nz(tblMain.CCon, 'No') = 'Yes'
and Appdate Between forms!frmReportDateRange!BeginDate
and forms!frmReportDateRange!EndDate
)
group by GrpName