• If I'm understanding the problem correctly, you might be able to get the field names in your procedure by using joins instead of unions:

    SELECT

    sub.invoiceamt as Subtotal

    grand.invoiceamt as GrandTotal

    admin.invoiceamt as AdminTotal

    FROM

    (

    SELECT I.ReimbursementTypeID,

    CAST (SUM(ISNULL(I.AMOUNT,0) - ISNULL(I.OtherAmount,0)) AS NUMERIC(18,2)) AS 'invoiceamt'

    FROM grantsystem G

    INNER JOIN request R on G.Grantsystemid = R.GrantSystemID

    INNER JOIN invoice I on R.requestid = I.requestid

    INNER JOIN vlookups L on I.Reimbursementtypeid = L.lookupid

    INNER JOIN vSchool VS on G.SystemID = VS.SystemID AND I.SchoolID = VS.SchoolID

    WHERE G.fiscalyear=@FiscalYear AND G.SystemID = @SystemId AND I.ReimbursementTypeID IN(34,35) AND

    I.SchoolID=Case When @SchoolId ='0' Then I.SchoolID Else @SchoolId End AND

    MONTH(R.FundMonth)=Case When @FundMonth='0' Then MONTH(R.FundMonth) Else CONVERT(INT,@FundMonth) End

    AND (I.IsActive=1) AND (R.IsActive=1) AND (G.IsActive=1)

    GROUP BY fiscalyear, G.SystemID,I.ReimbursementTypeID

    ) as sub

    JOIN

    (

    SELECT I.ReimbursementTypeID,

    CAST (SUM(ISNULL(I.AMOUNT,0) - ISNULL(I.OtherAmount,0)) AS NUMERIC(18,2)) AS 'invoiceamt'

    FROM grantsystem G

    INNER JOIN request R on G.Grantsystemid = R.GrantSystemID

    INNER JOIN invoice I on R.requestid = I.requestid

    INNER JOIN vlookups L on I.Reimbursementtypeid = L.lookupid

    INNER JOIN vSchool VS on G.SystemID = VS.SystemID AND I.SchoolID = VS.SchoolID

    WHERE G.fiscalyear=@FiscalYear AND G.SystemID = @SystemId AND I.ReimbursementTypeID IN(34,35,36) AND

    I.SchoolID=Case When @SchoolId ='0' Then I.SchoolID Else @SchoolId End AND

    MONTH(R.FundMonth)=Case When @FundMonth='0' Then MONTH(R.FundMonth) Else CONVERT(INT,@FundMonth) End

    AND (I.IsActive=1) AND (R.IsActive=1) AND (G.IsActive=1)

    GROUP BY fiscalyear, G.SystemID,I.ReimbursementTypeID

    ) as grand

    JOIN

    (

    SELECT I.ReimbursementTypeID,

    CAST (SUM(ISNULL(I.AMOUNT,0) - ISNULL(I.OtherAmount,0)) AS NUMERIC(18,2)) AS 'invoiceamt'

    FROM grantsystem G

    INNER JOIN request R on G.Grantsystemid = R.GrantSystemID

    INNER JOIN invoice I on R.requestid = I.requestid

    INNER JOIN vlookups L on I.Reimbursementtypeid = L.lookupid

    INNER JOIN vSchool VS on G.SystemID = VS.SystemID AND I.SchoolID = VS.SchoolID

    WHERE G.fiscalyear=@FiscalYear AND G.SystemID = @SystemId AND I.ReimbursementTypeID IN(37,38,53) AND

    I.SchoolID=Case When @SchoolId ='0' Then I.SchoolID Else @SchoolId End AND

    MONTH(R.FundMonth)=Case When @FundMonth='0' Then MONTH(R.FundMonth) Else CONVERT(INT,@FundMonth) End

    AND (I.IsActive=1) AND (R.IsActive=1) AND (G.IsActive=1)

    GROUP BY fiscalyear, G.SystemID,I.ReimbursementTypeID

    ) as admin