Home Forums SQL Server 2008 SQL Server 2008 - General Need help using the most efficient aggregation method in SQL Server 2008 R2 to sum up child rows in same table RE: Need help using the most efficient aggregation method in SQL Server 2008 R2 to sum up child rows in same table

  • personally I would not try to insert records into your table.

    see if this gets anywhere close to what you require....could well be improved I expect.

    declare @TP as INT

    set @TP = 9999

    ;WITH

    cteOrg

    AS ( SELECT C.OrgNum AS Bank ,

    B.OrgNum AS Region ,

    A.OrgNum AS Branch

    FROM

    dbo.OrgHierarchy AS A INNER JOIN dbo.OrgHierarchy AS B ON A.ParentOrgNum = B.OrgNum

    INNER JOIN dbo.OrgHierarchy AS C ON B.ParentOrgNum = C.OrgNum ) ,

    cte_allGoals

    AS ( SELECT dbo.GoalDefs.INum ,

    dbo.GoalDefs.GoalNum ,

    cteOrg.Branch ,

    @TP AS TP

    FROM

    dbo.GoalDefs CROSS JOIN cteOrg ) ,

    cte_Results

    AS ( SELECT AG.INum ,

    AG.GoalNum ,

    AG.Branch ,

    AG.TP ,

    ISNULL( SUM( RH.ResultItems ) , 0 )AS ResultItems ,

    ISNULL( SUM( RH.ResultValue ) , 0 )AS ResultValue

    FROM

    cte_AllGoals AS AG LEFT OUTER JOIN dbo.ResultsHistory AS RH ON AG.TP = RH.TimePeriod

    AND AG.Branch = RH.OrgNum

    AND AG.GoalNum = RH.GoalNum

    AND AG.INum = RH.INum

    GROUP BY AG.INum ,

    AG.GoalNum ,

    AG.Branch ,

    AG.TP )

    SELECT cte_Results.INum ,

    cte_Results.GoalNum ,

    cteOrg.Bank AS OrgNum ,

    SUM( cte_Results.ResultItems )AS RI ,

    SUM( cte_Results.ResultValue )AS RV ,

    cte_Results.TP

    FROM

    cteOrg INNER JOIN cte_Results ON cteOrg.Branch = cte_Results.Branch

    GROUP BY cte_Results.INum ,

    cte_Results.GoalNum ,

    cteOrg.Bank ,

    cte_Results.TP

    UNION ALL

    SELECT cte_Results.INum ,

    cte_Results.GoalNum ,

    cteOrg.Region AS OrgNum ,

    SUM( cte_Results.ResultItems )AS RI ,

    SUM( cte_Results.ResultValue )AS RV ,

    cte_Results.TP

    FROM

    cteOrg INNER JOIN cte_Results ON cteOrg.Branch = cte_Results.Branch

    GROUP BY cte_Results.INum ,

    cte_Results.GoalNum ,

    cteOrg.Region ,

    cte_Results.TP

    ORDER BY OrgNum , cte_Results.GoalNum;

    ________________________________________________________________
    you can lead a user to data....but you cannot make them think
    and remember....every day is a school day