You did not state what version of SQL Server you are using but if you are using SQL Server 2008+, then you should be able to accomplish this using GROUPING SETS
to get the rolled up row:
;with cte as
(
SELECT Date,
HomeTeam,
AwayTeam,
FTHG,
FTAG,
FTR,
CASE
WHEN HomeTeam = 'Arsenal'
THEN
CASE FTR
WHEN 'H' THEN 3
WHEN 'D' THEN 1
WHEN 'A' THEN 0
ELSE 0 END
WHEN AwayTeam = 'Arsenal'
THEN
CASE FTR
WHEN 'H' THEN 0
WHEN 'D' THEN 1
WHEN 'A'
THEN 3
ELSE 0 END
ELSE 0
END AS Points,
CASE
WHEN HomeTeam = 'Arsenal' THEN FTHG - FTAG
WHEN AwayTeam = 'Arsenal' THEN FTAG - FTHG
ELSE 0
END AS GD
FROM [Games].[dbo].[Master]
WHERE (HomeTeam = 'Arsenal' OR AwayTeam = 'Arsenal') AND Date < '20121201'
)
select
coalesce(convert(char(10), date, 120), 'Total')date,
coalesce(hometeam, '') hometeam,
coalesce(awayteam , '') awayteam,
sum(fthg) fthg,
sum(ftag) ftag,
coalesce(ftr, '') ftr,
sum(points) points,
sum(gd) gd
from cte
group by grouping sets((date, hometeam, awayteam, ftr), ())
See SQL Fiddle with Demo.
If you are running SQL Server 2005+, then you can also use ROLLUP()
:
;with cte as
(
SELECT Date,
HomeTeam,
AwayTeam,
FTHG,
FTAG,
FTR,
CASE
WHEN HomeTeam = 'Arsenal'
THEN
CASE FTR
WHEN 'H' THEN 3
WHEN 'D' THEN 1
WHEN 'A' THEN 0
ELSE 0 END
WHEN AwayTeam = 'Arsenal'
THEN
CASE FTR
WHEN 'H' THEN 0
WHEN 'D' THEN 1
WHEN 'A'
THEN 3
ELSE 0 END
ELSE 0
END AS Points,
CASE
WHEN HomeTeam = 'Arsenal' THEN FTHG - FTAG
WHEN AwayTeam = 'Arsenal' THEN FTAG - FTHG
ELSE 0
END AS GD
FROM games
WHERE (HomeTeam = 'Arsenal' OR AwayTeam = 'Arsenal') AND Date < '20121201'
)
select
coalesce(convert(char(10), date, 120), 'Total')date,
coalesce(hometeam, '') hometeam,
coalesce(awayteam , '') awayteam,
sum(fthg) fthg,
sum(ftag) ftag,
coalesce(ftr, '') ftr,
sum(points) points,
sum(gd) gd
from cte
group by rollup((date, hometeam, awayteam, ftr))
See SQL Fiddle with Demo