This one is a bit better in that It breakes the success/failures down for each of the retention levels:
SELECT dj.clientName
, (SELECT COUNT(*)
FROM domain_Job domj
INNER JOIN domain_image domi
ON domj.id = domi.jobId
INNER JOIN domain_ImageCopy domic
ON domi.id = domic.imageId
INNER JOIN nb_RetentionLevel nbrl
ON domic.retentionLevel = nbrl.iD
WHERE UtcBigIntToNomTime(domj.endTime) > GETDATE() - 30 AND dj.clientName = domj.clientName AND domj.statusCode = 0 AND nbrl.id = rl.id) AS 'Successful Jobs'
, (SELECT COUNT(*)
FROM domain_Job domj
INNER JOIN domain_image domi
ON domj.id = domi.jobId
INNER JOIN domain_ImageCopy domic
ON domi.id = domic.imageId
INNER JOIN nb_RetentionLevel nbrl
ON domic.retentionLevel = nbrl.iD
WHERE UtcBigIntToNomTime(domj.endTime) > GETDATE() - 30 AND dj.clientName = domj.clientName AND domj.statusCode <> 0 AND nbrl.id = rl.id) AS 'Failed Jobs'
, (SELECT COUNT(*)
FROM domain_Job domj
INNER JOIN domain_image domi
ON domj.id = domi.jobId
INNER JOIN domain_ImageCopy domic
ON domi.id = domic.imageId
INNER JOIN nb_RetentionLevel nbrl
ON domic.retentionLevel = nbrl.iD
WHERE UtcBigIntToNomTime(domj.endTime) > GETDATE() - 30 AND dj.clientName = domj.clientName AND nbrl.id = rl.id) AS 'Total Jobs'
, REPLACE(LEFT(100*ROUND(((CONVERT(NUMERIC(10,2),[Successful Jobs])/CONVERT(NUMERIC(10,2),[Total Jobs]))), 2), 3), '.', '') AS 'Final Success Rate'
, rl.label AS 'RetentionLevel'
FROM domain_Job dj
INNER JOIN domain_image di
ON dj.id = di.jobId
INNER JOIN domain_ImageCopy ic
ON di.id = ic.imageId
INNER JOIN nb_RetentionLevel rl
ON ic.retentionLevel = rl.iD
WHERE UtcBigIntToNomTime(dj.endTime) > GETDATE() - 30
GROUP BY dj.clientName, rl.label, rl.id
ORDER BY dj.clientName, rl.label
DISCLAIMER: When Testing this for the last day's time frame, I found a few clients that showed more jobs on here than in the activity monitor. I have no idea why that is.... and I am still researching it.