AS set NOCOUNT ON;
IF OBJECT_ID('tempdb..#programWithAncestor') IS NOT NULL DROP TABLE #programWithAncestor
			 SELECT * INTO #programWithAncestor 
			 FROM   fGetProgram_Ancestor_Aliases (NULL)
			 


SELECT  DISTINCT  JCLJob.JobName, p.ProgramName, p.AncestorName, SqlTables.TableName, 
 Statements.Description, Count(OccurrencesStmt.OccurID) AS stmtCount, (p.AncestorName + p.ProgramName) as k, JCLJob.membername, Paths.PathStr 
FROM         JCLJob INNER JOIN  JCLStep ON JCLJob.JobID = JCLStep.JobID
				INNER JOIN ProgramsUsedInPgm ON ProgramsUsedInPgm.JclPgmID=JCLStep.CalledPgmID
				INNER JOIN #programWithAncestor p ON ProgramsUsedInPgm.ProgramID=p.ProgramID
				INNER JOIN OccurrencesStmt ON OccurrencesStmt.ProgID = p.ProgramID
				INNER JOIN Statements ON OccurrencesStmt.StatementType = Statements.StatementType
				INNER JOIN StatementReference ON StatementReference.OccurID = OccurrencesStmt.OccurID
				INNER JOIN SqlTables ON StatementReference.ResourceID = SqlTables.SqlTableID
				LEFT JOIN ( SELECT 1 AS Flag, p1.ProgramName, p1.ProgramTypeID	FROM  #programWithAncestor p1
					GROUP BY p1.ProgramName, p1.ProgramTypeID 	  HAVING COUNT(*) > 1) f 
					on p.ProgramName = f.ProgramName and p.ProgramTypeID = f.ProgramTypeID
				LEFT JOIN dbo.Paths ON Paths.PathID = OccurrencesStmt.PathID AND f.Flag = 1
WHERE     JCLStep.CalledPgmID  > 0 AND StatementReference.ResourceType=1
GROUP BY  JCLJob.JobName, JCLJob.membername, SqlTables.TableName, p.AncestorName, p.ProgramName, Statements.Description, p.ProgramTypeid, Paths.PathStr
ORDER BY JCLJob.JobName, JCLJob.membername, SqlTables.TableName, k, Paths.PathStr, Statements.Description  