Link to home
Start Free TrialLog in
Avatar of mburk1968
mburk1968Flag for United States of America

asked on

Add Grand Total of all records as a Column SQL

I have a Column that calculates Cost for each Record. I need to add a Column that has the Grand Total for all records to be used in a calculation.

SELECT  CASE WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SPRING' ) THEN ( 1 )
             WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SUMMER' ) THEN ( 2 )
             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 20'
                    OR SUBSTRING(Sea.seas_name, 1, 8) = 'FALL I 2'
                  ) THEN ( 3 )
             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 2 '
                    OR SUBSTRING(Sea.seas_name, 1, 7) = 'FALL II'
                  ) THEN ( 4 )
             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'HOLIDAY' ) THEN ( 5 )
             ELSE ( 6 )
        END AS SeasonNumber ,
            ISNULL(( SELECT SUM(total_qty) AS qty
                 FROM   zzxinvtr AS PrvIV
                 WHERE  ( division = SC.division )
                        AND ( style = SC.style )
                        AND ( color_code = SC.color_code )
                        AND ( lbl_code = SC.lbl_code )
                        AND ( dimension = SC.dimension )
                        AND ( DATEADD(dd, DATEDIFF(dd, 0, trx_time), 0) <= DATEADD(yy,
                                                              -1, '06/30/2017') )
               ), 0) * ( SC.std_cost ) AS PrvCost ,
            ISNULL(( SELECT SUM(total_qty) AS qty
                 FROM   zzxinvtr AS PrvIV
                 WHERE  ( division = SC.division )
                        AND ( style = SC.style )
                        AND ( color_code = SC.color_code )
                        AND ( lbl_code = SC.lbl_code )
                        AND ( dimension = SC.dimension )
                        AND ( DATEADD(dd, DATEDIFF(dd, 0, trx_time), 0) <= DATEADD(yy,
                                                              -1, '06/30/2017') )
               ), 0) AS IvtyQtyPrvYr ,
        Sea.season ,
        Sea.seas_name ,
        SC.division ,
        SC.style ,
        SC.color_code ,
        SC.lbl_code ,
        SC.dimension ,
        SC.std_cost
FROM    zzxseasr AS Sea
        INNER JOIN zzxscolr AS SC ON Sea.season = SC.season
GROUP BY CASE WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SPRING' ) THEN ( 1 )
              WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SUMMER' ) THEN ( 2 )
              WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 20'
                     OR SUBSTRING(Sea.seas_name, 1, 8) = 'FALL I 2'
                   ) THEN ( 3 )
              WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 2 '
                     OR SUBSTRING(Sea.seas_name, 1, 7) = 'FALL II'
                   ) THEN ( 4 )
              WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'HOLIDAY' ) THEN ( 5 )
              ELSE ( 6 )
         END ,
        Sea.season ,
        Sea.seas_name ,
        SC.division ,
        SC.style ,
        SC.color_code ,
        SC.lbl_code ,
        SC.dimension ,
        SC.std_cost
Avatar of Ryan Chong
Ryan Chong
Flag of Singapore image

you can use cte with cross apply here, like this:

(if the field to calculate the grand total is PrvCost)

with cte as 
(
	SELECT  CASE WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SPRING' ) THEN ( 1 )
             WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SUMMER' ) THEN ( 2 )
             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 20'
                    OR SUBSTRING(Sea.seas_name, 1, 8) = 'FALL I 2'
                  ) THEN ( 3 )
             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 2 '
                    OR SUBSTRING(Sea.seas_name, 1, 7) = 'FALL II'
                  ) THEN ( 4 )
             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'HOLIDAY' ) THEN ( 5 )
             ELSE ( 6 )
        END AS SeasonNumber ,
            ISNULL(( SELECT SUM(total_qty) AS qty
                 FROM   zzxinvtr AS PrvIV
                 WHERE  ( division = SC.division )
                        AND ( style = SC.style )
                        AND ( color_code = SC.color_code )
                        AND ( lbl_code = SC.lbl_code )
                        AND ( dimension = SC.dimension )
                        AND ( DATEADD(dd, DATEDIFF(dd, 0, trx_time), 0) <= DATEADD(yy,
                                                              -1, '06/30/2017') )
               ), 0) * ( SC.std_cost ) AS PrvCost ,
            ISNULL(( SELECT SUM(total_qty) AS qty
                 FROM   zzxinvtr AS PrvIV
                 WHERE  ( division = SC.division )
                        AND ( style = SC.style )
                        AND ( color_code = SC.color_code )
                        AND ( lbl_code = SC.lbl_code )
                        AND ( dimension = SC.dimension )
                        AND ( DATEADD(dd, DATEDIFF(dd, 0, trx_time), 0) <= DATEADD(yy,
                                                              -1, '06/30/2017') )
               ), 0) AS IvtyQtyPrvYr ,
        Sea.season ,
        Sea.seas_name ,
        SC.division ,
        SC.style ,
        SC.color_code ,
        SC.lbl_code ,
        SC.dimension ,
        SC.std_cost
FROM    zzxseasr AS Sea
        INNER JOIN zzxscolr AS SC ON Sea.season = SC.season
GROUP BY CASE WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SPRING' ) THEN ( 1 )
              WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SUMMER' ) THEN ( 2 )
              WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 20'
                     OR SUBSTRING(Sea.seas_name, 1, 8) = 'FALL I 2'
                   ) THEN ( 3 )
              WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 2 '
                     OR SUBSTRING(Sea.seas_name, 1, 7) = 'FALL II'
                   ) THEN ( 4 )
              WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'HOLIDAY' ) THEN ( 5 )
              ELSE ( 6 )
         END ,
        Sea.season ,
        Sea.seas_name ,
        SC.division ,
        SC.style ,
        SC.color_code ,
        SC.lbl_code ,
        SC.dimension ,
        SC.std_cost
)
select cte.*, b.total from cte
cross apply
(select sum(PrvCost) total from cte) b

Open in new window

Avatar of mburk1968

ASKER

Your answer appears to be spot on. Sorry in my delay. I attempted to apply your logic to my entire query however I failed to account for the fact that not only do I need PrYrCost but CurYrCost as well. However I think I'm just making matters worse. Here is what I'm attempting to do.

WITH    cte
          AS ( SELECT   CASE WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SPRING' )
                             THEN ( 1 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SUMMER' )
                             THEN ( 2 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 20'
                                    OR SUBSTRING(Sea.seas_name, 1, 8) = 'FALL I 2'
                                  ) THEN ( 3 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 2 '
                                    OR SUBSTRING(Sea.seas_name, 1, 7) = 'FALL II'
                                  ) THEN ( 4 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'HOLIDAY' )
                             THEN ( 5 )
                             ELSE ( 6 )
                        END AS SeasonNumber ,
                        Sea.season ,
                        Sea.seas_name ,
                        SC.division ,
                        SC.style ,
                        SC.color_code ,
                        SC.lbl_code ,
                        SC.dimension ,
                        SC.std_cost ,
                        ISNULL(( SELECT SUM(total_qty) AS qty
                                 FROM   zzxinvtr AS PrvIV
                                 WHERE  ( division = SC.division )
                                        AND ( style = SC.style )
                                        AND ( color_code = SC.color_code )
                                        AND ( lbl_code = SC.lbl_code )
                                        AND ( dimension = SC.dimension )
                                        AND ( DATEADD(dd,
                                                      DATEDIFF(dd, 0, trx_time),
                                                      0) <= DATEADD(yy, -1,
                                                              '06/30/2017') )
                               ), 0) AS IvtyQtyPrvYr ,
                        ISNULL(( SELECT SUM(total_qty) AS qty
                                 FROM   zzxinvtr AS PrvIV
                                 WHERE  ( division = SC.division )
                                        AND ( style = SC.style )
                                        AND ( color_code = SC.color_code )
                                        AND ( lbl_code = SC.lbl_code )
                                        AND ( dimension = SC.dimension )
                                        AND ( DATEADD(dd,
                                                      DATEDIFF(dd, 0, trx_time),
                                                      0) <= DATEADD(yy, -1,
                                                              '06/30/2017') )
                               ), 0) * ( SC.std_cost ) AS PrvYrCost ,
                        ISNULL(( SELECT SUM(total_qty) AS qty
                                 FROM   zzxinvtr AS CurIV
                                 WHERE  ( division = SC.division )
                                        AND ( style = SC.style )
                                        AND ( color_code = SC.color_code )
                                        AND ( lbl_code = SC.lbl_code )
                                        AND ( dimension = SC.dimension )
                                        AND ( DATEADD(dd,
                                                      DATEDIFF(dd, 0, trx_time),
                                                      0) <= '06/30/2017' )
                               ), 0) AS IvtyQtyCurYr ,
                        ISNULL(( SELECT SUM(total_qty) AS qty
                                 FROM   zzxinvtr AS CurIV
                                 WHERE  ( division = SC.division )
                                        AND ( style = SC.style )
                                        AND ( color_code = SC.color_code )
                                        AND ( lbl_code = SC.lbl_code )
                                        AND ( dimension = SC.dimension )
                                        AND ( DATEADD(dd,
                                                      DATEDIFF(dd, 0, trx_time),
                                                      0) <= '06/30/2017' )
                               ), 0) * ( SC.std_cost ) AS CurYrCost ,
                        OTS.Open_Orders + OTS.Picked AS OpenQty ,
                        OTS.OTSOpen AS OTSQty ,
                        OTS.OTSOpen * SC.std_cost AS Ext_OTS_Cost ,
                        ( OTS.Open_Orders + OTS.Picked ) * SC.std_cost AS Ext_Open_Cost ,
                        ISNULL(dbo.KLLfn_Get_Total_Open_Amount_For_Style(SC.division,
                                                              SC.style,
                                                              SC.color_code,
                                                              SC.lbl_code,
                                                              SC.dimension), 0) AS OpenDollars ,
                        CASE WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SPRING' )
                             THEN ( 1 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SUMMER' )
                             THEN ( 2 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 20'
                                    OR SUBSTRING(Sea.seas_name, 1, 8) = 'FALL I 2'
                                  ) THEN ( 3 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 2 '
                                    OR SUBSTRING(Sea.seas_name, 1, 7) = 'FALL II'
                                  ) THEN ( 4 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'HOLIDAY' )
                             THEN ( 5 )
                             ELSE ( 6 )
                        END AS Expr1
               FROM     zzxseasr AS Sea
                        INNER JOIN zzxscolr AS SC ON Sea.season = SC.season
                                                     AND ( Sea.division IN (
                                                           @Divisions ) )
                        LEFT OUTER JOIN ( SELECT    division ,
                                                    style ,
                                                    color_code ,
                                                    lbl_code ,
                                                    DIMENSION ,
                                                    SUM(Open_Orders) AS Open_Orders ,
                                                    SUM(Picked) AS Picked ,
                                                    SUM(OTSWIP) AS OTSOpen
                                          FROM      [KLL Cut and Sold OTS Sum w/ DMPK]
                                          WHERE     ( IvtyLocation IN (
                                                      @Locations ) )
                                          GROUP BY  division ,
                                                    style ,
                                                    color_code ,
                                                    lbl_code ,
                                                    DIMENSION
                                        ) AS OTS ON SC.division = OTS.division
                                                    AND SC.style = OTS.style
                                                    AND SC.color_code = OTS.color_code
                                                    AND SC.lbl_code = OTS.lbl_code
                                                    AND SC.dimension = OTS.DIMENSION
               GROUP BY CASE WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SPRING' )
                             THEN ( 1 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 6) = 'SUMMER' )
                             THEN ( 2 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 20'
                                    OR SUBSTRING(Sea.seas_name, 1, 8) = 'FALL I 2'
                                  ) THEN ( 3 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'FALL 2 '
                                    OR SUBSTRING(Sea.seas_name, 1, 7) = 'FALL II'
                                  ) THEN ( 4 )
                             WHEN ( SUBSTRING(Sea.seas_name, 1, 7) = 'HOLIDAY' )
                             THEN ( 5 )
                             ELSE ( 6 )
                        END ,
                        Sea.season ,
                        Sea.seas_name ,
                        SC.division ,
                        SC.style ,
                        SC.color_code ,
                        SC.lbl_code ,
                        SC.dimension ,
                        SC.std_cost ,
                        OTS.Open_Orders + OTS.Picked ,
                        OTS.OTSOpen
               HAVING   ( SC.division IN ( @Divisions ) )
                        AND ( Sea.season IN ( @Seasons ) )
                        AND ( ISNULL(( SELECT   SUM(total_qty) AS qty
                                       FROM     zzxinvtr AS PrvIV
                                       WHERE    ( division = SC.division )
                                                AND ( style = SC.style )
                                                AND ( color_code = SC.color_code )
                                                AND ( lbl_code = SC.lbl_code )
                                                AND ( dimension = SC.dimension )
                                                AND ( DATEADD(dd,
                                                              DATEDIFF(dd, 0,
                                                              trx_time), 0) <= DATEADD(yy,
                                                              -1, '06/30/2017') )
                                     ), 0) <> 0 )
                        OR ( SC.division IN ( @Divisions ) )
                        AND ( Sea.season IN ( @Seasons ) )
                        AND ( ISNULL(( SELECT   SUM(total_qty) AS qty
                                       FROM     zzxinvtr AS CurIV
                                       WHERE    ( division = SC.division )
                                                AND ( style = SC.style )
                                                AND ( color_code = SC.color_code )
                                                AND ( lbl_code = SC.lbl_code )
                                                AND ( dimension = SC.dimension )
                                                AND ( DATEADD(dd,
                                                              DATEDIFF(dd, 0,
                                                              trx_time), 0) <= '06/30/2017' )
                                     ), 0) <> 0 )
               ORDER BY SeasonNumber ,
                        Sea.season ,
                        SC.style ,
                        SC.color_code ,
                        SC.lbl_code ,
                        SC.dimension
             )
    SELECT  cte.* ,
            b.total
    FROM    cte
            CROSS APPLY ( SELECT    SUM(PrvYrCost) total
                          FROM      cte
                        ) b

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Ryan Chong
Ryan Chong
Flag of Singapore image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
This worked perfectly. Thank You. Of course the parameters have changed however you provided me with what I asked for twice now. I guess what they want to see is a percentage.  PrvYrCost / PrvYrCost_Total * 100 AS Percent of PrvYear AND CurYrCost / CurYrCost_Total * 100 AS Percent of CurYear
This worked perfectly. Thank You. Of course the parameters have changed however you provided me with what I asked for twice now. I guess what they want to see is a percentage.  PrvYrCost / PrvYrCost_Total * 100 AS Percent of PrvYear AND CurYrCost / CurYrCost_Total * 100 AS Percent of CurYear