AS
BEGIN
	SET NOCOUNT ON;

	IF OBJECT_ID('tempdb..#programWithAncestor') IS NOT NULL DROP TABLE #programWithAncestor;

	SELECT *
	INTO #programWithAncestor
	FROM fGetProgram_Ancestor_Aliases (NULL);

	SELECT
		s.ProgramName,
		s.ProgramID,
		s.ProgramTypeID,
		s.AncestorID,
		s.AncestorName,
		p.PathID,
		p.PathStr
	FROM (
		SELECT DISTINCT
			pa.ProgramName,
			pa.ProgramID,
			pa.ProgramTypeID,
			pa.AncestorID,
			pa.AncestorName,
			o.PathID
		FROM #programWithAncestor pa
			LEFT OUTER JOIN Occurrences o ON o.OccurID = pa.OccurID
			LEFT OUTER JOIN (
				SELECT AncestorID AS ProgramID
				FROM #programWithAncestor
				WHERE ProgramTypeID IN (15, 16)
			) f ON pa.ProgramID = f.ProgramID
			WHERE pa.ProgramTypeID != -1
				AND f.ProgramID IS NULL
	) s
		LEFT OUTER JOIN Paths p ON s.PathID = p.PathID
	ORDER BY s.ProgramTypeID, s.ProgramName;
END
