DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN

					    DECLARE crs CURSOR WITH RETURN FOR
						SELECT f.LogicalName AS File_Name,
					           pa.AliasName AS ProgramName,
					           st.Description AS Statement_Type,
					            COUNT(DISTINCT os.OccurID) AS Expr1,
					            prg.Ancestor,
					            pth.PathStr,
                               (prg.Ancestor || pa.AliasName) AS k
					     FROM StatementReference sr
					          INNER JOIN OccurrencesStmt os ON sr.OccurID = os.OccurID
					          INNER JOIN Files f ON sr.ResourceID = f.FileID
					          INNER JOIN Programs prg ON os.ProgID = prg.ProgramID
							  INNER JOIN ProgramAliases pa ON prg.ProgramID = pa.ProgramId AND pa.AliasType = 0
					          INNER JOIN Statements st ON sr.StatementType = st.StatementType
							  LEFT OUTER JOIN
							                 (
							                    SELECT  1 AS Flag,
										                pgxa.AliasName,
										                pgx.ProgramTypeID
										         FROM Programs pgx
										              INNER JOIN ProgramAliases pgxa ON pgx.ProgramID = pgxa.ProgramId
										                                               AND pgxa.AliasType = 0
										         GROUP BY pgxa.AliasName, pgx.ProgramTypeID
										         HAVING COUNT(*) > 1
											 ) x ON pa.AliasName = x.AliasName
											        AND prg.ProgramTypeID = x.ProgramTypeID
							  LEFT OUTER JOIN Paths pth ON 	pth.PathID = os.PathID AND x.Flag = 1			        											
					     WHERE sr.ResourceType = 9
					           AND prg.ProgramTypeID IN (1, 2, 3, 10, 11, 15, 16)
					     GROUP BY f.LogicalName, pa.AliasName, st.Description, prg.Ancestor, pth.PathStr
					     ORDER BY f.LogicalName, pth.PathStr, k, st.Description ;

				         OPEN crs;
				

END	
