AS
BEGIN
SET NOCOUNT ON


IF OBJECT_ID('dbo.cacheEZViewer_Usage_Datacom') IS NOT NULL  DROP TABLE dbo.cacheEZViewer_Usage_Datacom
SELECT
	   c.DatacomID,
	   c.DatacomName,
	   c.Description,
	   c.StatementStartRow,
	   c.StatementStartColumn,
	   c.StatementEndRow,
	   c.StatementEndColumn,
	   pth1.PathStr AS StmtPathStr,
	   c.ProgramName,
	   c.ProgramID,
	   c.ProgramTypeID,
	   pth2.PathStr AS ProgramPath,
	   c.ProgStartRow,
	   c.ProgStartCol,
	   c.ProgEndRow,
	   c.ProgEndCol,
	   c.Ancestor,
	   c.AncestorID,
	   c.AncestorTypeID
     INTO dbo.cacheEZViewer_Usage_Datacom
     FROM
			    (   SELECT
					   core.DatacomID,
					   core.DatacomName,
					   core.Description,
					   core.StartRow AS StatementStartRow,
					   core.StartCol AS StatementStartColumn,
					   core.EndRow AS StatementEndRow,
					   core.EndCol AS StatementEndColumn,
					   core.PathID AS StmtPathID,
					   prog.ProgramName,
					   prog.ProgramID,
					   prog.ProgramTypeID,
					   prog.PathID AS ProgramPathID,
					   prog.StartRow AS ProgStartRow,
					   prog.StartCol AS ProgStartCol,
					   prog.EndRow AS ProgEndRow,
					   prog.EndCol AS ProgEndCol,
					   prog.Ancestor,
					   prog.AncestorID,
					   prog.AncestorTypeID
					   FROM (
							 SELECT
								    os.ProgID,
								    os.PathID,
								    os.StartRow,
								    os.StartCol,
								    os.EndRow,
								    os.EndCol,
								    sr.ResourceID,
								    st.Description,
								    res.ID AS DatacomID,
	                                       res.TableName AS DatacomName
							 FROM dbo.StatementReference sr
								  INNER JOIN dbo.OccurrencesStmt os ON sr.OccurID = os.OccurID
								  INNER JOIN dbo.Statements st ON sr.StatementType = st.StatementType
								  INNER JOIN dbo.DatacomTables res ON res.ID = sr.ResourceID
							 WHERE sr.ResourceType = 182
								   AND  os.PathID IS NOT NULL
						    )core
							INNER JOIN ( -- programs
										SELECT p.ProgramID, p.ProgramName, p.ProgramTypeID, p.Ancestor,
											  occ.StartRow, occ.StartCol, occ.EndRow, occ.EndCol
											 ,occ.PathID
											 ,pa.ProgramID AS AncestorID, pa.ProgramTypeID AS AncestorTypeID
										   FROM dbo.Occurrences occ
											    INNER JOIN (select OccurID, ProgramTypeID, tp.ProgramID, tpa.AliasName as ProgramName, Ancestor from dbo.Programs tp
                                                                                INNER JOIN ProgramAliases tpa on tpa.ProgramId = tp.ProgramId and tpa.AliasType = 0 ) p ON p.OccurID = occ.OccurID AND p.ProgramTypeID IN (1,15,16)
											    LEFT OUTER JOIN (SELECT DISTINCT ProgramTypeID, tp.ProgramID, tpa.AliasName as ProgramName from dbo.Programs tp
											    								INNER JOIN  ProgramAliases tpa on tpa.ProgramId = tp.ProgramId ) pa ON pa.ProgramName = p.Ancestor AND pa.ProgramTypeID = 8
										   WHERE occ.PathID IS NOT NULL
									 ) prog ON core.ProgID = prog.ProgramID
						   GROUP BY core.DatacomID, core.DatacomName, core.Description,
								  core.StartRow , core.StartCol, core.EndRow, core.EndCol, core.PathID,
								  prog.ProgramName, prog.ProgramID,  prog.ProgramTypeID, prog.PathID,  prog.StartRow, prog.StartCol, prog.EndRow, prog.EndCol, prog.Ancestor,
								  prog.AncestorID, prog.AncestorTypeID
			
		  )c
		   LEFT OUTER JOIN  dbo.Paths pth1 ON pth1.PathID = c.StmtPathID
		   LEFT OUTER JOIN  dbo.Paths pth2 ON pth2.PathID = c.ProgramPathID


END
