AS set NOCOUNT ON;
IF OBJECT_ID('tempdb..#programWithAncestor') IS NOT NULL DROP TABLE #programWithAncestor
			 SELECT *
			 INTO #programWithAncestor 
			 FROM   fGetProgram_Ancestor_Aliases (NULL)
			  where ProgramTypeID in (1, 3)

SELECT (CASE WHEN MFAdabasFiles.FileName IS NOT NULL THEN MFAdabasFiles.FileName
		ELSE CONVERT(varchar(16), AdabasFiles.FileNumber) END) as fName,
	  (CASE WHEN MFAdabasDB.DBName IS  NOT NULL THEN MFAdabasDB.DBName 
		ELSE CONVERT(varchar(16), AdabasDatabases.DBNumber) END) as db,
    p.ProgramName AS ProgramName, Statements.Description, COUNT(OccurrencesStmt.OccurID) AS stmtCount, pth.PathStr 
FROM StatementReference INNER JOIN OccurrencesStmt ON StatementReference.OccurID = OccurrencesStmt.OccurID AND StatementReference.ResourceType = 62
 INNER JOIN Statements ON OccurrencesStmt.StatementType = Statements.StatementType 
 INNER JOIN #programWithAncestor p ON OccurrencesStmt.ProgID = p.ProgramID 
 INNER JOIN AdabasView ON StatementReference.ResourceID = AdabasView.ViewID
 INNER JOIN AdabasFiles ON AdabasFiles.FileID=AdabasView.AdabasFileID
 INNER JOIN AdabasDatabases ON AdabasDatabases.AdabasDBID=AdabasFiles.AdabasDBID
 LEFT JOIN MFAdabasFiles ON MFAdabasFiles.FileNumber=AdabasFiles.FileNumber
 LEFT JOIN MFAdabasDB ON MFAdabasDB.DBNumber= AdabasDatabases.DBNumber
   LEFT JOIN ( SELECT 1 AS Flag, p1.ProgramName, p1.ProgramTypeID	FROM  #programWithAncestor p1
					GROUP BY p1.ProgramName, p1.ProgramTypeID 	  HAVING COUNT(*) > 1) f 
					on p.ProgramName = f.ProgramName and p.ProgramTypeID = f.ProgramTypeID
	LEFT JOIN dbo.Paths pth ON pth.PathID = OccurrencesStmt.PathID AND f.Flag = 1

WHERE  AdabasFiles.FileID IN (select * from #numeric_param_temp)
GROUP BY MFAdabasFiles.FileName, AdabasFiles.FileNumber, MFAdabasDB.DBName, AdabasDatabases.DBNumber, p.ProgramName, Statements.Description, pth.PathStr
UNION
SELECT (CASE WHEN MFAdabasFiles.FileName IS NOT NULL THEN MFAdabasFiles.FileName
		ELSE CONVERT(varchar(16), AdabasFiles.FileNumber) END) as fName,
	  (CASE WHEN MFAdabasDB.DBName IS  NOT NULL THEN MFAdabasDB.DBName 
		ELSE CONVERT(varchar(16), AdabasDatabases.DBNumber) END) as db,
    p.ProgramName, Statements.Description, COUNT(OccurrencesStmt.OccurID) AS stmtCount, pth.PathStr 
FROM StatementReference INNER JOIN OccurrencesStmt ON StatementReference.OccurID = OccurrencesStmt.OccurID 
 INNER JOIN Statements ON OccurrencesStmt.StatementType = Statements.StatementType 
 INNER JOIN #programWithAncestor p ON OccurrencesStmt.ProgID = p.ProgramID
 INNER JOIN AdabasFiles ON StatementReference.ResourceID=AdabasFiles.FileID AND StatementReference.ResourceType=56 
 INNER JOIN AdabasDatabases ON AdabasDatabases.AdabasDBID=AdabasFiles.AdabasDBID
 LEFT JOIN MFAdabasFiles ON MFAdabasFiles.FileNumber=AdabasFiles.FileNumber
 LEFT JOIN MFAdabasDB ON MFAdabasDB.DBNumber= AdabasDatabases.DBNumber
   LEFT JOIN ( SELECT 1 AS Flag, p1.ProgramName, p1.ProgramTypeID	FROM  #programWithAncestor p1
					GROUP BY p1.ProgramName, p1.ProgramTypeID 	  HAVING COUNT(*) > 1) f 
					on p.ProgramName = f.ProgramName and p.ProgramTypeID = f.ProgramTypeID
	LEFT JOIN dbo.Paths pth ON pth.PathID = OccurrencesStmt.PathID AND f.Flag = 1
WHERE  AdabasFiles.FileID IN (select * from #numeric_param_temp)
GROUP BY MFAdabasFiles.FileName, AdabasFiles.FileNumber, MFAdabasDB.DBName, AdabasDatabases.DBNumber, p.ProgramName, Statements.Description, pth.PathStr
UNION 
SELECT (CASE WHEN MFAdabasFiles.FileName IS NOT NULL THEN MFAdabasFiles.FileName
		ELSE CONVERT(varchar(16), AdabasFiles.FileNumber) END) as fName,
	  (CASE WHEN MFAdabasDB.DBName IS  NOT NULL THEN MFAdabasDB.DBName 
		ELSE CONVERT(varchar(16), AdabasDatabases.DBNumber) END) as db,
   p.ProgramName, Statements.Description, COUNT(OccurrencesStmt.OccurID) AS stmtCount, pth.PathStr
FROM StatementReference INNER JOIN OccurrencesStmt ON StatementReference.OccurID = OccurrencesStmt.OccurID AND StatementReference.ResourceType = 193
 INNER JOIN Statements ON OccurrencesStmt.StatementType = Statements.StatementType
 INNER JOIN #programWithAncestor p ON OccurrencesStmt.ProgID = p.ProgramID 
 INNER JOIN NaturalDBView on naturaldbview.viewid = StatementReference.ResourceID
 INNER JOIN NaturalDDM on NaturalDDM.DDM_ID = NaturalDBView.DDM_ID
 INNER JOIN AdabasView ON AdabasView.ViewID=NaturalDDM.ReferenceResourceID AND NaturalDDM.ResourceType=62
 INNER JOIN AdabasFiles ON AdabasFiles.FileID=AdabasView.AdabasFileID
 INNER JOIN AdabasDatabases ON AdabasDatabases.AdabasDBID=AdabasFiles.AdabasDBID
 LEFT JOIN MFAdabasFiles ON MFAdabasFiles.FileNumber=AdabasFiles.FileNumber
 LEFT JOIN MFAdabasDB ON MFAdabasDB.DBNumber= AdabasDatabases.DBNumber
   LEFT JOIN ( SELECT 1 AS Flag, p1.ProgramName, p1.ProgramTypeID	FROM  #programWithAncestor p1
					GROUP BY p1.ProgramName, p1.ProgramTypeID 	  HAVING COUNT(*) > 1) f 
					on p.ProgramName = f.ProgramName and p.ProgramTypeID = f.ProgramTypeID
	LEFT JOIN dbo.Paths pth ON pth.PathID = OccurrencesStmt.PathID AND f.Flag = 1
WHERE  AdabasFiles.FileID IN (select * from #numeric_param_temp)
GROUP BY MFAdabasFiles.FileName, AdabasFiles.FileNumber, MFAdabasDB.DBName, AdabasDatabases.DBNumber, p.ProgramName, Statements.Description, pth.PathStr
ORDER BY fName, db, p.ProgramName, pth.PathStr, Statements.Description 