AS set NOCOUNT ON;
BEGIN
       IF OBJECT_ID('tempdb..#prg') IS NOT NULL DROP TABLE #prg
       SELECT p1.ProgramID, p2.AliasName AS ProgramName, p1.ProgramTypeID, p1.Ancestor, p1.OccurId, p2.AliasType
       INTO #prg 
       FROM Programs p1
            INNER JOIN ProgramAliases p2 ON p2.ProgramId = p1.ProgramId


       SELECT id, ProgramID, ProgramName, ProgramTypeID, ProgramPath, Ancestor, AncestorID, AncestorTypeID
       FROM
          (
                SELECT temp1.id,
                        p.ProgramID,
                        p.ProgramName,
                        p.ProgramTypeID,
                        pth.Pathstr ProgramPath,
                        p.Ancestor, 
                        aprog.ProgramID AS AncestorID,
                        aprog.ProgramTypeID AS AncestorTypeID  
                  FROM #prg p
                       INNER JOIN #tempAPI temp1 on temp1.prgName = p.ProgramName
                       LEFT OUTER JOIN occurrences occ ON p.OccurID = occ.OccurID
                       LEFT OUTER JOIN Paths pth ON occ.Pathid = pth.Pathid
                       LEFT OUTER JOIN  
                                   (
                                   SELECT ProgramID, ProgramName, ProgramTypeID 
                                   FROM #prg 
                                   WHERE ProgramTypeID = 8
                                   GROUP BY ProgramID, ProgramName, ProgramTypeID 
                                   ) aprog ON aprog.ProgramName = p.Ancestor
                  WHERE p.AliasType = 0

                  UNION 

                SELECT  temp2.id, 
                       res.ResourceID,
                       res.Name,
                        '',
                        '',
                        '',
                        '',
                        ''
                FROM Resources res    
                    INNER JOIN #tempAPI  temp2 oN temp2.imsTran = res.Name
                WHERE res.ResourceType=20
           )src ;

END;