AS 
BEGIN
   SET NOCOUNT ON

             IF OBJECT_ID('tempdb..#programWithAncestor') IS NOT NULL DROP TABLE #programWithAncestor;
			 SELECT ProgramID ,ProgramName ,AncestorName 
			 INTO #programWithAncestor 
			 FROM   fGetProgram_Ancestor_Aliases (NULL)
			 WHERE OccurID > 0
                   AND ProgramTypeID NOT IN (8, 9, 15, 16, 13, 19, 14)
                   AND ProgramID in (Select * from #numeric_param_temp);


			SELECT pgm.ProgramName, pgm.AncestorName, COALESCE(pgm.AncestorName, '') + pgm.ProgramName AS k, pgm.ProgramID
			FROM #programWithAncestor pgm
				  LEFT OUTER JOIN StatementReference sr ON sr.ResourceType = 5 AND pgm.ProgramID = sr.ResourceID  
				  LEFT OUTER JOIN (
										 SELECT  pa2.ProgramId
										 FROM ProgramAliases pa2
                							  INNER JOIN JCLPgm jp ON pa2.AliasName = jp.PgmName
									  ) f1 ON pgm.ProgramID = f1.ProgramID
				  LEFT OUTER JOIN (
										 SELECT  pa3.ProgramId --,pa3.AliasName 
										 FROM ProgramAliases pa3
                							   INNER JOIN (
																SELECT cp.ProgName AS progName  
																FROM MFCICSList m1
																		INNER JOIN MFCICSListVsGroup m2 ON m1.ListID = m2.ListID
																		INNER JOIN MFCICSGroup m3 ON m2.GroupID = m3.GroupID
																		INNER JOIN MFCICSGroupVsEntity m4 ON m3.GroupID = m4.GroupID AND m4.EntityTypeID = 2
																		INNER JOIN MFCICSGroupVsEntityLinks m5 ON m4.EntityID = m5.EntityID
																		INNER JOIN MFCICSTransaction mt ON m5.TransID = mt.TransID
																		INNER JOIN MFCICSProgram cp ON cp.ProgID = mt.ProgID AND mt.ProgID > 0
																UNION
																SELECT ProgName 
																FROM Resources  
																WHERE ResourceType = 20
															) tp ON pa3.AliasName = tp.ProgName
									  ) f2 ON pgm.ProgramID = f2.ProgramID  
			WHERE       
					  sr.ResourceID IS NULL
				  AND f1.ProgramID IS NULL
				  AND f2.ProgramID IS NULL
			ORDER BY k ;
	END;
