AS 
set NOCOUNT ON;
IF OBJECT_ID('tempdb..#programWithAlias') IS NOT NULL DROP TABLE #programWithAlias
			 SELECT Programs.ProgramID, Programs.ProgramTypeID,
				pa.AliasName AS ProgramName
			 INTO #programWithAlias 
			 FROM  dbo.Programs INNER JOIN dbo.ProgramAliases pa  ON Programs.ProgramID = pa.ProgramId and pa.AliasType = 0
			 	AND (pa.ProgramID in (Select * from #numeric_param_temp))

SELECT pa.ProgramName, 
	(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,
    Statements.Description, COUNT(OccurrencesStmt.OccurID) AS stmtCount, pa.ProgramID 
FROM StatementReference INNER JOIN OccurrencesStmt ON StatementReference.OccurID = OccurrencesStmt.OccurID AND StatementReference.ResourceType = 62
 INNER JOIN Statements ON OccurrencesStmt.StatementType = Statements.StatementType 
 INNER JOIN #programWithAlias pa ON OccurrencesStmt.ProgID = pa.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
WHERE pa.ProgramTypeID = 1 --cobol with native sql
GROUP BY pa.ProgramName, MFAdabasFiles.FileName, AdabasFiles.FileNumber, MFAdabasDB.DBName, AdabasDatabases.DBNumber, Statements.Description, pa.ProgramID
UNION
SELECT pa.ProgramName, 
    (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,
    Statements.Description, COUNT(OccurrencesStmt.OccurID) AS stmtCount, pa.ProgramID 
FROM StatementReference INNER JOIN OccurrencesStmt ON StatementReference.OccurID = OccurrencesStmt.OccurID 
 INNER JOIN Statements ON OccurrencesStmt.StatementType = Statements.StatementType 
 INNER JOIN #programWithAlias pa ON OccurrencesStmt.ProgID = pa.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
WHERE pa.ProgramTypeID = 1 --cobol direct call
GROUP BY pa.ProgramName, MFAdabasFiles.FileName, AdabasFiles.FileNumber, MFAdabasDB.DBName, AdabasDatabases.DBNumber, Statements.Description, pa.ProgramID
UNION 
SELECT pa.ProgramName, 
	(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,
   Statements.Description, COUNT(OccurrencesStmt.OccurID) AS stmtCount, pa.ProgramID
FROM StatementReference INNER JOIN OccurrencesStmt ON StatementReference.OccurID = OccurrencesStmt.OccurID AND StatementReference.ResourceType = 193
 INNER JOIN Statements ON OccurrencesStmt.StatementType = Statements.StatementType
 INNER JOIN #programWithAlias pa ON OccurrencesStmt.ProgID = pa.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
WHERE pa.ProgramTypeID = 3 --natural
GROUP BY pa.ProgramName, MFAdabasFiles.FileName, AdabasFiles.FileNumber, MFAdabasDB.DBName, AdabasDatabases.DBNumber, Statements.Description, pa.ProgramID
ORDER BY pa.ProgramName, pa.ProgramID, fName, db, Statements.Description
