AS SELECT DISTINCT JCLJob.JobName, JCLPhysicalDataSet.DataSetName, JCLPgm.PgmName AS ProgramName, '' AS ProgramAncestor, '#EZ1#' AS Description
    , 0 as Count, JCLPgm.PgmName AS k, JCLJob.membername, JCLDDRef.MemberName as dsMemberName, NULL AS PathStr
FROM JCLJob INNER JOIN
      JCLStep ON JCLJob.JobID = JCLStep.JobID INNER JOIN
      JCLDD ON JCLStep.StepID = JCLDD.StepID INNER JOIN
      JCLDDRef ON JCLDD.DDID = JCLDDRef.DDID INNER JOIN
      JCLPhysicalDataSet ON JCLDDRef.DataSetID = JCLPhysicalDataSet.DataSetID INNER JOIN
      JCLPgm ON JCLStep.CalledPgmID = JCLPgm.PgmID
WHERE JCLJob.JobID in (Select * from #numeric_param_temp) AND 
		JCLPgm.PgmName NOT IN (SELECT DISTINCT ProgramAliases.AliasName FROM Programs INNER JOIN ProgramAliases ON Programs.ProgramID = ProgramAliases.ProgramId WHERE Programs.OccurID<>0)
union
SELECT DISTINCT JCLJob.JobName, JCLPhysicalDataSet.DataSetName, p.ProgramName, Program_Ancestor=dbo.ancestor(p.ProgramTypeid,p.Ancestor),
	'#EZ2#' as Description, 0 as Count, (dbo.ancestor(p.ProgramTypeid,p.Ancestor) + p.ProgramName) as k, JCLJob.membername,
	JCLDDRef.MemberName as dsMemberName, NULL AS PathStr
FROM (SELECT Programs.ProgramID, Programs.OccurID, Programs.ProgramTypeID, Programs.Ancestor, ProgramAliases.AliasName AS ProgramName 
		FROM Programs INNER JOIN ProgramAliases ON Programs.ProgramID = ProgramAliases.ProgramId and ProgramAliases.AliasType = 0) p 
		INNER JOIN
    ProgramsUsedInPgm ON p.ProgramID = ProgramsUsedInPgm.ProgramID INNER JOIN
	JCLStep ON ProgramsUsedInPgm.JclPgmID = JCLStep.CalledPgmID INNER JOIN
      JCLJob ON JCLJob.JobID = JCLStep.JobID INNER JOIN
      JCLDD ON JCLStep.StepID = JCLDD.StepID INNER JOIN
      JCLDDRef ON JCLDD.DDID = JCLDDRef.DDID INNER JOIN
      JCLPhysicalDataSet ON JCLDDRef.DataSetID = JCLPhysicalDataSet.DataSetID
      INNER JOIN StatementReference ON p.ProgramID = StatementReference.ResourceID 
WHERE JCLJob.JobID in (Select * from #numeric_param_temp) AND (p.OccurID = 0) AND StatementReference.ResourceType = 5
	AND (p.ProgramTypeID not in (-1)
		 OR (p.ProgramTypeID=-1 
			  and StatementReference.Occurid not in (SELECT DISTINCT t.StmtRefOccurID FROM
					(SELECT StatementReference.OccurID as StmtRefOccurID, Programs.ProgramID
							FROM StatementReference INNER JOIN Programs ON Programs.ProgramID = StatementReference.ResourceID 
							WHERE StatementReference.ResourceType = 5 and Programs.Occurid=0 ) as t
					WHERE t.ProgramID =ProgramsUsedInPgm.ProgramID )
		   )
	)
union
SELECT JCLJob.JobName, JCLPhysicalDataSet.DataSetName, p.ProgramName,
	Program_Ancestor=dbo.ancestor(p.ProgramTypeid,p.Ancestor), Statements.Description AS Description
	,Count(StatementReference.OccurID) AS Count, (dbo.ancestor(p.ProgramTypeid,p.Ancestor) + p.ProgramName) as k, JCLJob.membername 
	, JCLDDRef.MemberName as dsMemberName, pth.PathStr AS PathStr 
FROM (SELECT Programs.ProgramID, Programs.ProgramTypeID, Programs.Ancestor, ProgramAliases.AliasName AS ProgramName, Programs.OccurID 
		FROM Programs INNER JOIN ProgramAliases ON Programs.ProgramID = ProgramAliases.ProgramId and ProgramAliases.AliasType = 0) p INNER JOIN
      ProgramsUsedInPgm ON p.ProgramID = ProgramsUsedInPgm.ProgramID INNER JOIN
      JCLJob INNER JOIN
      JCLStep ON JCLJob.JobID = JCLStep.JobID INNER JOIN
      JCLDD ON JCLStep.StepID = JCLDD.StepID INNER JOIN
      JCLDDRef ON JCLDD.DDID = JCLDDRef.DDID INNER JOIN
      JCLPhysicalDataSet ON JCLDDRef.DataSetID = JCLPhysicalDataSet.DataSetID ON
      ProgramsUsedInPgm.JclPgmID = JCLStep.CalledPgmID INNER JOIN
      Files ON p.ProgramID = Files.ProgID AND (Files.Name = JCLDD.DDName OR
      Files.Name LIKE '%' + '-' + JCLDD.DDName) INNER JOIN
      StatementReference ON Files.FileID = StatementReference.ResourceID INNER JOIN
      Statements ON StatementReference.StatementType = Statements.StatementType
      LEFT JOIN ( SELECT 1 AS Flag, AliasName, ProgramTypeID	FROM dbo.Programs  INNER JOIN dbo.ProgramAliases
		 			ON Programs.ProgramID = ProgramAliases.ProgramId and ProgramAliases.AliasType = 0
					GROUP BY AliasName, ProgramTypeID 	  HAVING COUNT(*) > 1) f on p.ProgramName = f.AliasName and p.ProgramTypeID = f.ProgramTypeID
	  LEFT JOIN Occurrences occ ON occ.OccurID = p.OccurID
	  LEFT JOIN dbo.Paths pth ON pth.PathID = occ.PathID AND f.Flag = 1
WHERE  (StatementReference.ResourceType = 9) AND JCLJob.JobID in (Select * from #numeric_param_temp) 
group by JCLJob.JobName, JCLJob.membername, JCLPhysicalDataSet.DataSetName, JCLDDRef.MemberName, p.Ancestor, ProgramName, Description, p.ProgramTypeid, pth.PathStr

UNION   --AMS statements
SELECT DISTINCT JCLJob.JobName, JCLPhysicalDataSet.DataSetName, JCLPgm.PgmName AS ProgramName, '' AS ProgramAncestor, 'AMS: ' + istmtp.Description AS Description
    ,Count(istm.IDCAMSStatementID) AS Count, JCLPgm.PgmName AS k, JCLJob.membername, idu.MemberName as dsMemberName, NULL AS PathStr 
FROM JCLJob INNER JOIN JCLStep ON JCLJob.JobID = JCLStep.JobID
    INNER JOIN   dbo.JCLIDCAMSStatements istm ON JCLStep.StepID = istm.StepID
			 INNER JOIN dbo.JCLIDCAMSDatasetUsages idu ON idu.IDCAMSStatementID = istm.IDCAMSStatementID
			 INNER JOIN JCLPhysicalDataSet ON idu.DataSetID = JCLPhysicalDataSet.DataSetID
			 INNER JOIN JCLPgm ON JCLStep.CalledPgmID = JCLPgm.PgmID
			 INNER JOIN dbo.JCLIDCAMSStatementTypes istmtp ON istm.IDCAMSStatementTypeID = istmtp.IDCAMSStatementTypeID
WHERE JCLJob.JobID in (Select * from #numeric_param_temp)
group by JCLJob.JobName, JCLJob.membername, JCLPhysicalDataSet.DataSetName, idu.MemberName, JCLPgm.PgmName, Description
ORDER BY JCLJob.JobName, JCLJob.membername, JCLPhysicalDataSet.DataSetName, dsMemberName, k, PathStr, Description