次のクエリは同じ結果を生成しますか?
SELECT c.role_id , c.subgroup , c.subgroup_description , COUNT(a.USER_ID) user_count FROM cmp_role c LEFT OUTER JOIN ( SELECT r.user_id , r.role_id FROM ( SELECT r.user_id , r.role_id , r.participant_code , MAX(r.status_id) FROM user_role r INNER JOIN cmp_role c ON c.role_id = r.role_id WHERE r.participant_code IS NOT NULL AND c.group_id = 3 GROUP BY r.user_id , r.role_id , r.participant_code HAVING MAX(r.status_id) IN ( SELECT status_id FROM user_role WHERE (Active = 1 OR (Active IN ( 0,3 ) AND SYSDATE BETWEEN effective_from_date AND effective_to_date) ) ) ) r INNER JOIN user e ON e.user_id = RTRIM(r.user_id) ) a ON a.role_id = c.role_id WHERE c.group_id = 3 GROUP BY c.role_id , c.subgroup , c.subgroup_description ORDER BY c.subgroup
プレ>読みやすいです(私にとって)。同じ結果が得られる場合は、
r.participant_code
をドロップすることから始めることができます およびMAX(r.status_id)
内側の選択から。