• An alternative solution...

    ;WITH cteJune ([level],[SthdiCode],[FunctionalArea],[Qty])

    AS

    (

    SELECT '01','G22','Area1',5 UNION ALL

    SELECT '01','G22','Area2',5 UNION ALL

    SELECT '01','G22','Area3',5 UNION ALL

    SELECT '02','G22','Area1',5 UNION ALL

    SELECT '02','G22','Area2',5 UNION ALL

    SELECT '02','G22','Area3',20 UNION ALL

    SELECT '02','WWW','Area3',5

    ),

    cteJuly ([level],[SthdiCode],[FunctionalArea],[Qty])

    AS

    (

    SELECT '01','G22','Area1',15 UNION ALL

    SELECT '01','G22','Area2',15 UNION ALL

    SELECT '01','G22','Area3',15 UNION ALL

    SELECT '02','G22','Area1',15 UNION ALL

    SELECT '02','G22','Area2',15 UNION ALL

    SELECT '02','G22','Area3',15 UNION ALL

    SELECT '02','WWW','Area3',5

    )

    SELECT

    r.[level]

    ,r.SthdiCode

    ,r.FunctionalArea

    ,r.QtyJune

    ,r.QtyJuly

    ,SUM(r.QtyJuly-r.QtyJune) OVER (PARTITION BY r.[level],r.SthdiCode,r.FunctionalArea) AS [Difference]

    FROM

    (

    SELECT DISTINCT

    cteJune.[level]

    ,cteJune.SthdiCode

    ,cteJune.FunctionalArea

    ,cteJune.Qty AS QtyJune

    ,cteJuly.Qty AS QtyJuly

    FROM

    cteJune

    INNER JOIN

    cteJuly

    ON cteJune.[level] = cteJuly.[level]

    AND cteJune.SthdiCode = cteJuly.SthdiCode

    AND cteJune.FunctionalArea = cteJuly.FunctionalArea

    ) r

    levelSthdiCodeFunctionalAreaQtyJuneQtyJulyDifference

    01G22Area151510

    01G22Area251510

    01G22Area351510

    02G22Area151510

    02G22Area251510

    02G22Area32015-5

    02WWWArea3550