Using the sample data DDL Bert generously supplied, here's an alternative that reads the base table 1 time instead of 6:
SELECT Col1,
Col2=CASE WHEN GROUPING(Col2)=1 THEN 'Diff' ELSE Col2 END,
Col3=CASE WHEN GROUPING(Col2)=1 THEN SUM(CASE WHEN Col2='before' THEN Col3 ELSE 0 END)-SUM(CASE WHEN Col2='after' THEN Col3 ELSE 0 END) ELSE SUM(Col3) END
FROM @Table
GROUP BY GROUPING SETS ((Col1,Col2),(Col1))
ORDER BY Col1,CASE WHEN Col2='before' THEN 0 WHEN Col2='After' THEN 1 ELSE 2 END;
Cheers!