I may have to go that direction.. at the very least building all of the logic into a Stored Procedure (I'm working with MS SQL).
I prefer to put as much logic into the DB side as possible as I have found significant performance gains in doing so.
The query as it stands (without the sub query we're speaking about) is as follows:
SELECT
pms.type_name AS pms_type_name,
pmct.type_name AS pmct_type_name,
pmc.prj_code,
pmc.Phases,
se.emp_alpha_name,
ccom.company_name,
pmc.location_code,
replace(str(month(pmc.WrittenDate),2),' ','0')+'-'+replace(str(day(pmc.WrittenDate),2),' ','0')+'-'+datename(yyyy,pmc.WrittenDate) AS writtendate,
pmc.CID,
swr.sw_id,
swr.sw_approvalstage,
swr.sw_archived,
pmc.ContractProposal,
cc.fname,
cc.lname,
ccom.company_name,
pmp.prj_name,
COUNT(pmcsc.contractSubConsultants_idx) AS sub_consultant_count,
SUM(CAST(pmcsc.flag_sub_consultant_certificate_of_insurance AS INT)) AS sub_consultant_cert_of_insurance,
SUM(CAST(pmcsc.flag_sub_consultant_agreement AS INT)) AS sub_consultant_agreement
FROM
PM_Contracts pmc
INNER JOIN
CC_contacts cc
ON (pmc.contact_uid = cc.contact_idx)
INNER JOIN
PM_CNPTypes pmct
ON (pmc.cnp_type_idx = pmct.type_idx)
INNER JOIN
PM_Status pms
ON (pmc.status_idx = pms.type_idx)
INNER JOIN
PM_Projects pmp
ON (pmp.prj_code = pmc.prj_code)
INNER JOIN
CC_Companies ccom
ON (cc.company_idx = ccom.company_idx)
INNER JOIN
System_empinfo se
ON (pmc.contract_pm = se.emp_code)
LEFT OUTER JOIN
PM_LinkForm lf
ON(lf.CID = pmc.CID)
LEFT OUTER JOIN
PM_StartWorkReq swr
ON (lf.sw_id = swr.sw_id)
LEFT JOIN
PM_ContractSubConsultants pmcsc
ON (pmc.CID = pmcsc.contract_CID)
WHERE
(
pmc.status_idx in(2,3,9)
OR
(
SELECT
SUM(CAST(pmcsc.flag_sub_consultant_certificate_of_insurance AS INT))
FROM
PM_ContractSubConsultants pmcsc
WHERE
pmcsc.contract_CID = pmc.CID
) > 0
OR
(
SELECT
SUM(CAST(pmcsc.flag_sub_consultant_agreement AS INT))
FROM
PM_ContractSubConsultants pmcsc
WHERE
pmcsc.contract_CID = pmc.CID
) > 0
)
GROUP BY
pms.type_name,
pmct.type_name,
pmc.prj_code,
pmc.Phases,
se.emp_alpha_name,
ccom.company_name,
pmc.location_code,
replace(str(month(pmc.WrittenDate),2),' ','0')+'-'+replace(str(day(pmc.WrittenDate),2),' ','0')+'-'+datename(yyyy,pmc.WrittenDate),
pmc.CID,
swr.sw_id,
swr.sw_approvalstage,
swr.sw_archived,
pmc.ContractProposal,
cc.fname,
cc.lname,
ccom.company_name,
pmp.prj_name
The subquery would be on PM_ContractSubConsultants, retrieving all of the contents of the field 'phase' for all matches, separated by commas.
From what I've seen while researching this over the last hour is that it's either impossible or no one's bothered to try. My assumption would be the former.
SO unless anyone has any ideas, I'm going to move forward to building this as a stored procedure utilizing temp tables to aggregate the data.