AS BEGIN
   SET NOCOUNT ON

 IF OBJECT_ID('tempdb..#stmtassoc') IS NOT NULL DROP TABLE #stmtassoc;
SELECT  OccurID, RefID1, GroupID,
        MAX(COALESCE(OffSet, '')) AS OffSet,
       MAX(COALESCE(VarSize, '')) AS VarSize
INTO #stmtassoc
FROM (
       SELECT sr.OccurID, sr.StatementType,
            asoc1.RefID1,
            asoc1.GroupID,
            CASE asoc1.AssocTypeID
                WHEN 0 THEN str1.IntValue 
                ELSE NULL
            END AS OffSet,
             CASE asoc1.AssocTypeID 
                WHEN 1 THEN str1.IntValue 
                ELSE NULL
            END AS VarSize --, 
       FROM StatementreferenceAssociation asoc1
           INNER JOIN StatementReference sr ON sr.RefID = asoc1.RefID2 AND sr.ResourceType = 221 
           INNER JOIN IntegerConstants str1 ON str1.ID = sr.ResourceID 
             
) src
GROUP BY src.OccurID, src.RefID1, src.GroupID
ORDER BY src.OccurID

--- select * from #stmtassoc


SELECT        
   	   var1.VarID, 
		var2.VarID AS DataDependantVarId, 
		st.Description AS StatementType, 
		pgal.AliasName AS ProgramName, 
        pth.PathStr, 
        os.StartRow,
        var2.IsField,
        var1.VarSize  as Varsize1,
        var2.VarSize  as Varsize2,
        var1.Type,
        var2.Type,
		a1.OffSet  AS Var1OffSet,
		a2.OffSet  AS Var2OffSet,
		a1.VarSize  AS Var1Lenght,
		a2.VarSize  AS Var2Length,
		a1.GroupID AS varGrp1,
		a2.GroupID AS varGrp1

FROM OccurrencesStmt os
     INNER JOIN Statements st ON st.StatementType = os.StatementType
    INNER JOIN Paths pth ON pth.PathID = os.PathID
    INNER JOIN ProgramAliases pgal ON os.ProgID = pgal.ProgramID AND pgal.AliasType = 0 
     INNER JOIN StatementReference sr1 ON os.OccurID = sr1.OccurID AND sr1.ResourceType = 4 AND sr1.bRead = 2
    INNER JOIN Variables var1 ON sr1.ResourceID = var1.VarID 
    INNER JOIN StatementReference sr2 ON sr1.OccurID = sr2.OccurID AND sr2.ResourceType = 4 AND sr2.bRead = 1  
    INNER JOIN Variables var2 ON var2.VarID = sr2.ResourceID
    LEFT OUTER JOIN #stmtassoc a1 ON sr1.RefID = a1.RefID1 AND os.OccurID = a1.OccurID
    LEFT OUTER JOIN #stmtassoc a2 ON sr2.RefID = a2.RefID1 AND os.OccurID = a2.OccurID
WHERE  (var1.VarID IN (Select * from #numeric_param_temp))  AND 
        sr1.StatementType NOT IN (14, 18, 23, 30, 326, 390, 412)
                  
ORDER BY var2.VarID, 
         var1.VarID;

END