AS SELECT Programs_4.ProgramID, T_N1.N1, T_N1m.n1, T_N2.N2, T_N2m.n2, (Programs_4.Ancestor+Programs_4.ProgramName) as k
FROM (SELECT Programs.ProgramID, ProgramAliases.AliasName AS ProgramName, Programs.Ancestor 
				FROM dbo.Programs INNER JOIN ProgramAliases ON ProgramAliases.ProgramId = Programs.ProgramID and ProgramAliases.AliasType = 0) AS Programs_4 
	LEFT OUTER JOIN
           (SELECT ProgramID, COUNT(cnt) AS n2
             FROM (SELECT Programs.ProgramID, COUNT(*) AS cnt
                     FROM Programs INNER JOIN
                          OccurrencesStmt ON Programs.ProgramID = OccurrencesStmt.ProgID
                     WHERE (Programs.OccurID <> 0) 
                     	AND OccurrencesStmt.StatementType IN (select param from #stmtTypes)
                     GROUP BY Programs.ProgramID, OccurrencesStmt.StatementType
                  ) AS T GROUP BY ProgramID
           ) AS T_N2m ON Programs_4.ProgramID = T_N2m.ProgramID LEFT OUTER JOIN
           (SELECT Programs_3.ProgramID, COUNT(OccurrencesStmt_3.StatementType) AS N2
             FROM  OccurrencesStmt AS OccurrencesStmt_3 INNER JOIN
                 Programs AS Programs_3 ON OccurrencesStmt_3.ProgID = Programs_3.ProgramID
             WHERE (Programs_3.OccurID <> 0) 
             	 AND OccurrencesStmt_3.StatementType IN (select param from #stmtTypes)
             GROUP BY Programs_3.ProgramID) AS T_N2 ON Programs_4.ProgramID = T_N2.ProgramID LEFT OUTER JOIN
           (SELECT Programs_2.ProgramID, COUNT(Variables.VarName) AS N1
             FROM  Variables INNER JOIN
                 Programs AS Programs_2 INNER JOIN
                 OccurrencesStmt AS OccurrencesStmt_2 ON Programs_2.ProgramID = OccurrencesStmt_2.ProgID INNER JOIN
                 StatementReference ON OccurrencesStmt_2.OccurID = StatementReference.OccurID ON
                 Variables.VarID = StatementReference.ResourceID
             WHERE (StatementReference.ResourceType = 4) AND (Programs_2.OccurID <> 0) 
             	AND OccurrencesStmt_2.StatementType IN (select param from #stmtTypes)
             GROUP BY Programs_2.ProgramID) AS T_N1 ON Programs_4.ProgramID = T_N1.ProgramID LEFT OUTER JOIN
           (SELECT ProgramID, COUNT(cnt) AS n1
             FROM (SELECT DISTINCT Programs_1.ProgramID, Variables_1.VarName AS cnt
                     FROM  Variables AS Variables_1 INNER JOIN
                        Programs AS Programs_1 INNER JOIN
                        OccurrencesStmt AS OccurrencesStmt_1 ON Programs_1.ProgramID = OccurrencesStmt_1.ProgID INNER JOIN
                        StatementReference AS StatementReference_1 ON OccurrencesStmt_1.OccurID = StatementReference_1.OccurID ON
                        Variables_1.VarID = StatementReference_1.ResourceID
                     WHERE  (StatementReference_1.ResourceType = 4) AND (Programs_1.OccurID <> 0) 
                     	AND OccurrencesStmt_1.StatementType IN (select param from #stmtTypes)
                  ) AS t_1                                     		 
             GROUP BY ProgramID) AS T_N1m ON Programs_4.ProgramID = T_N1m.ProgramID
WHERE (T_N1m.n1 IS NOT NULL) AND (T_N1.N1 IS NOT NULL) AND (T_N2m.n2 IS NOT NULL) AND (T_N2.N2 IS NOT NULL)
	AND Programs_4.ProgramID in (Select * from #numeric_param_temp)
ORDER BY k