It could get messy if there are lots of titles you want to do that to, but working with your specific request, taking the "All installed software" as a starting point:
SELECT Top 1000000
CASE
WHEN Left(tblSoftwareUni.softwareName, 6) = 'Java 7' THEN 'Java 7'
WHEN Left(tblSoftwareUni.softwareName, 6) = 'Java 8' THEN 'Java 8'
WHEN Left(tblSoftwareUni.softwareName, 10) = 'Java(TM) 6' THEN 'Java 6'
ELSE tblSoftwareUni.softwareName
END As Software,
Count(tblSoftware.AssetID) As Total
FROM
tblSoftware
Inner Join tblAssets On tblSoftware.AssetID = tblAssets.AssetID
Inner Join tblSoftwareUni On tblSoftware.softID = tblSoftwareUni.SoftID
Inner Join tblAssetCustom On tblAssets.AssetID = tblAssetCustom.AssetID
WHERE
tblAssetCustom.State = 1
GROUP BY
CASE
WHEN Left(tblSoftwareUni.softwareName, 6) = 'Java 7' THEN 'Java 7'
WHEN Left(tblSoftwareUni.softwareName, 6) = 'Java 8' THEN 'Java 8'
WHEN Left(tblSoftwareUni.softwareName, 10) = 'Java(TM) 6' THEN 'Java 6'
ELSE tblSoftwareUni.softwareName
END
ORDER BY
Count(tblSoftware.AssetID) Desc
should do what you're asking for.
The
CASE
WHEN Left(tblSoftwareUni.softwareName, 6) = 'Java 7' THEN 'Java 7'
WHEN Left(tblSoftwareUni.softwareName, 6) = 'Java 8' THEN 'Java 8'
WHEN Left(tblSoftwareUni.softwareName, 10) = 'Java(TM) 6' THEN 'Java 6'
ELSE tblSoftwareUni.softwareName
END
does the substitutions for Java 6, 7 and 8 while the ELSE passes anything else through.
If your list is long, you might consider creating a substitution table and referencing that.