AS SELECT ProgramAliases.AliasName AS ProgramName, 
  Files.LogicalName AS [File Name], 
  Statements.Description AS [Statement type], 
  Count(OccurrencesStmt.OccurID) AS Expr1,
  Programs.Ancestor, Programs.ProgramID, PAncestor.ProgramID AS AncestorID, (Programs.Ancestor+ProgramAliases.AliasName) as k  
FROM (
  (
    (StatementReference INNER JOIN OccurrencesStmt 
                        ON StatementReference.OccurID = OccurrencesStmt.OccurID
     ) INNER JOIN Files 
       ON StatementReference.ResourceID = Files.FileID
  ) INNER JOIN Programs 
    ON OccurrencesStmt.ProgID = Programs.ProgramID
	INNER JOIN ProgramAliases ON Programs.ProgramID = ProgramAliases.ProgramId and ProgramAliases.AliasType = 0
) INNER JOIN Statements 
ON StatementReference.StatementType = Statements.StatementType 
 LEFT JOIN (SELECT AliasName AS ProgramName, Programs.ProgramID, Programs.ProgramTypeID 
					FROM ProgramAliases INNER JOIN Programs on ProgramAliases.ProgramId = Programs.ProgramID 
					WHERE ProgramAliases.AliasType = 0) AS PAncestor on 
   Programs.Ancestor = PAncestor.ProgramName and PAncestor.ProgramTypeID NOT IN (15, 16, 19)
WHERE (
   StatementReference.ResourceType=9
   AND (Files.TypeCode <> 32 OR Files.TypeCode IS NULL)
   AND Programs.ProgramTypeid NOT IN (9,13,19)
 )
GROUP BY Programs.Ancestor, ProgramAliases.AliasName, Programs.ProgramID, PAncestor.ProgramID, Files.LogicalName, Statements.Description
ORDER BY k, Programs.ProgramID, Files.LogicalName
