SELECT
IFNULL(c1,'total') AS total,
SUM(IF(c2='B1',c3,0)) AS B1,
SUM(IF(c2='B2',c3,0)) AS B2,
SUM(IF(c2='B3',c3,0)) AS B3,
SUM(IF(c2='B4',c3,0)) AS B4,
SUM(IF(c2='total',c3,0)) AS total
FROM
(
SELECT c1,IFNULL(c2,'total') AS c2,SUM(c3) AS c3
FROM tx
GROUPBY c1,c2
WITH ROLLUP
HAVING c1 ISNOTNULL
) AS A ,
tx
GROUPBY c1
WITH ROLLUP