-- try changing this
OUTER APPLY (
SELECT
active_users = SUM(CASE WHEN activity_flag = 1 AND reg_flag = 0 THEN 1 ELSE 0 END),
new_users = SUM(CASE WHEN activity_flag = 1 AND reg_flag = 1 THEN 1 ELSE 0 END),
inactive_users = SUM(CASE WHEN activity_flag = 0 THEN 1 ELSE 0 END)
FROM dbo.person p
WHERE p.comp_code = comp.comp_code
) x1
-- to this
LEFT JOIN (
SELECT
comp_code,
active_users = SUM(CASE WHEN activity_flag = 1 AND reg_flag = 0 THEN 1 ELSE 0 END),
new_users = SUM(CASE WHEN activity_flag = 1 AND reg_flag = 1 THEN 1 ELSE 0 END),
inactive_users = SUM(CASE WHEN activity_flag = 0 THEN 1 ELSE 0 END)
FROM dbo.person
GROUP BY comp_code
) x1 ON x1.comp_code = comp.comp_code
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden