AS
BEGIN
SET NOCOUNT ON


IF OBJECT_ID('dbo.cacheEZViewer_Usage_PgmInJob') IS NOT NULL  DROP TABLE dbo.cacheEZViewer_Usage_PgmInJob
SELECT DISTINCT DataSetName, GenerationNumber, DataSetID, IsTemp, DataSetMemberName, Class,
       JobID, JobName, MemberName, CA7JobName, CA7JobId, JobPath,
       StepName, StepPath,stepStartRow, ProgramName, DDName, DDPath, DDStartRow, Status, NormalDisposition,
       IsDummy, OverridingDDID,
       ProgramID, ProgramTypeID, ProgramPath, ProgStartRow, ProgStartCol, ProgEndRow, ProgEndCol, Ancestor, AncestorID, AncestorTypeID
INTO dbo.cacheEZViewer_Usage_PgmInJob
FROM (
	   SELECT JCLPhysicalDataSet.DataSetName,
			CASE
			    WHEN JCLPhysicalDataSet.IsGeneration = '1'
			    THEN JCLPhysicalDataSet.GenerationNumber
			    ELSE NULL
			END AS GenerationNumber,
			JCLPhysicalDataSet.DataSetID,
			JCLPhysicalDataSet.IsTemp,
			JCLDDRef.MemberName AS DataSetMemberName,
			JCLSpoolDataSet.Class,
			JCLJob.JobID,
			JCLJob.JobName,
			JCLJob.MemberName,
			ca7_jobs.JOB_NAME AS CA7JobName,
			ca7_jobs.JobId AS CA7JobId,
			JobPosition.ResourceFilePath AS JobPath,
			JCLStep.StepName,
			JCLPosition.ResourceFilePath AS StepPath,
			JCLPosition.StartRow AS stepStartRow,
                        case when pa.AliasName is null then JCLPgm.PgmName else pa.AliasName end AS ProgramName,
			JCLDD.DDName,
			CASE
			    WHEN JCLDD.OverridingDDID > 0 THEN NULLIF(DDPositionOver.ResourceFilePath, '0')
			    ELSE NULLIF(DDPosition.ResourceFilePath, '0')
			END AS DDPath,
			CASE
			    WHEN JCLDD.OverridingDDID > 0
			    THEN DDPositionOver.StartRow
			    ELSE DDPosition.StartRow
			END AS DDStartRow,
			JCLStatusType.Description AS Status,
			JCLDisposition.Description AS NormalDisposition,
			CASE
			    WHEN JCLDD.DDID IS NULL
			    THEN NULL
			    ELSE JCLDD.IsDummy
			END AS IsDummy,
			CASE
			    WHEN JCLDD.DDID IS NULL
			    THEN NULL
			    ELSE JCLDD.OverridingDDID
			END AS OverridingDDID,
			prog.ProgramID,
			prog.ProgramTypeID,
			prog.ProgramPath,
			prog.ProgStartRow,
			prog.ProgStartCol,
			prog.ProgEndRow,
			prog.ProgEndCol,
			prog.Ancestor,
			prog.AncestorID,
			prog.AncestorTypeID
	   FROM dbo.JCLStep
		   INNER JOIN dbo.JCLPgm ON JCLPgm.PgmID = JCLStep.CalledPgmID
		   INNER JOIN dbo.JCLPosition ON JCLPosition.PositionID = JCLStep.PositionID
		   INNER JOIN dbo.JCLJob ON JCLStep.JobID = JCLJob.JobID
		   LEFT OUTER JOIN dbo.ca7_jobs ON ca7_jobs.JCL_MEMBER = JCLJob.MemberName
		   INNER JOIN dbo.JCLPosition AS JobPosition ON JCLJob.PositionID = JobPosition.PositionID
		   LEFT OUTER JOIN dbo.JCLDD ON JCLDD.StepID = JCLStep.StepID
		   LEFT OUTER JOIN dbo.JCLDDRef ON JCLDDRef.DDID = JCLDD.DDID
		   LEFT OUTER JOIN dbo.JCLPhysicalDataSet ON JCLPhysicalDataSet.DataSetID = JCLDDRef.DataSetID
		   LEFT OUTER JOIN dbo.JCLSpoolDataSet ON JCLSpoolDataSet.SpoolID = JCLDDRef.SpoolDataSetID
		   LEFT OUTER JOIN dbo.JCLStatusType ON JCLDDRef.Status = JCLStatusType.JCLStatusType
		   LEFT OUTER JOIN dbo.JCLDisposition ON JCLDDRef.NormalDisposition = JCLDisposition.JCLDispositionType
		   LEFT OUTER JOIN dbo.JCLDD AS Overr ON JCLDD.OverridingDDID = Overr.DDID
		   LEFT OUTER JOIN dbo.JCLPosition AS DDPositionOver ON DDPositionOver.PositionID = Overr.PositionID
		   LEFT OUTER JOIN dbo.JCLPosition AS DDPosition ON DDPosition.PositionID = JCLDD.PositionID
		   LEFT OUTER JOIN ( SELECT DISTINCT dbo.ProgramAliases.AliasName as ProgramName,
							    Programs.ProgramID,
							    Programs.ProgramTypeID,
							    Paths.PathStr AS ProgramPath,
							    Occurrences.StartRow AS ProgStartRow,
							    Occurrences.StartCol AS ProgStartCol,
							    Occurrences.EndRow AS ProgEndRow,
							    Occurrences.EndCol AS ProgEndCol,
							    Programs.Ancestor,
							    Programs_Ancestor.ProgramID AS AncestorID,
							    Programs_Ancestor.ProgramTypeID AS AncestorTypeID
						 FROM dbo.Programs
                                                          INNER JOIN dbo.ProgramAliases ON ProgramAliases.ProgramId = Programs.ProgramID
							  LEFT OUTER JOIN dbo.Occurrences ON Occurrences.OccurID = Programs.OccurID
							  LEFT OUTER JOIN Paths ON paths.PathID = Occurrences.PathID
							  LEFT OUTER JOIN (SELECT DISTINCT ProgramAliases.AliasName, ProgramAliases.ProgramId FROM ProgramAliases) AS Aliases_Ancestor ON Aliases_Ancestor.AliasName = Programs.Ancestor
                                                          LEFT OUTER JOIN Programs Programs_Ancestor ON Programs_Ancestor.ProgramID = Aliases_Ancestor.ProgramID
				    								AND Programs_Ancestor.ProgramTypeID IN (8, 13)
						 WHERE Programs.ProgramTypeID NOT IN (8, 13)
						 )prog ON prog.ProgramName = JCLPgm.PgmName
                        LEFT OUTER JOIN ProgramAliases pa ON pa.ProgramId = prog.ProgramID and pa.AliasType = 0
	   WHERE JCLStep.CalledProcID = 0
		    AND
		    (JCLPhysicalDataSet.IsInstream <> 1 OR JCLPhysicalDataSet.IsInstream IS NULL)
	 )s


END