我需要统计某个字段多个值下对应的多个数据的统计,然后在最后还需要有一个总计。最后的结果如下,要显示这样的。

下面是我的SQL语句,感觉写了很多重复的,有没有能帮忙看看,可以优化下的么?
select * from (select a.name,b.u_register,b.a_register,b.acceptSimple,b.acceptGeneary,b.a_close,b.warnPunish,b.forfeitPunish,b.punishMoney,b.punishAmount,b.punishCount,b.punishZK,
b.punishDX,b.punishTY,measure_cc,measure_pj,measure_mamount from config a
left join(
select c_type_c,sum(case when (c_registerdate_d < convert(datetime,'2014-11-01') and c_closedate_d is null) then 1 else 0 end) as u_register,
sum(case when c_registerdate_d between cast('2014-11-01' as datetime) and cast('2014-12-01' as datetime) then 1 else 0 end) as a_register,
sum(case when c_accepttype_c = 1 then 1 else 0 end) as acceptSimple,
sum(case when c_accepttype_c = 2 then 1 else 0 end) as acceptGeneary,
sum(case when c_closedate_d between cast('2014-11-01' as datetime) and cast('2014-12-01' as datetime) then 1 else 0 end) as a_close,
sum(case when c_punishtype_c = 1 then 1 else 0 end) as warnPunish,
sum(case when c_punishtype_c = 2 then 1 else 0 end) as forfeitPunish,
sum(case when c_punishtype_c = 2 then c_pamount_c else 0 end ) as punishMoney,
sum(case when c_punishtype_c = 3 and ISNUMERIC(c_pamount_c) >0 then c_pamount_c else 0 end) as punishAmount,
sum(case when c_punishtype_c = 4 and ISNUMERIC(c_pamount_c) >0 then c_pamount_c else 0 end) as punishCount
from TW group by c_type_c)b on a.seccode = b.c_type_c where a.fircode = 10 and a.seccode is not null)m
union
select '总计' as name,sum(case when ISNUMERIC(u_register) > 0 then u_register else 0 end) u_register,
sum(case when ISNUMERIC(a_register) > 0 then a_register else 0 end)a_register,
sum(case when ISNUMERIC(acceptSimple) > 0 then acceptSimple else 0 end)acceptSimple,
sum(case when ISNUMERIC(acceptGeneary) >0 then acceptGeneary else 0 end)acceptGeneary,
sum(case when ISNUMERIC(a_close) >0 then a_close else 0 end)a_close,
sum(case when ISNUMERIC(warnPunish) >0 then warnPunish else 0 end)warnPunish,
sum(case when ISNUMERIC(forfeitPunish)>0 then forfeitPunish else 0 end)forfeitPunish,
sum(case when ISNUMERIC(punishMoney)>0 then punishMoney else 0 end)punishMoney,
sum(case when ISNUMERIC(punishAmount)>0 then punishAmount else 0 end)punishAmount,
sum(case when ISNUMERIC(punishCount) >0 then punishCount else 0 end)punishCount
from (
select c_type_c,sum(case when (c_registerdate_d < convert(datetime,'2014-11-01') and c_closedate_d is null) then 1 else 0 end) as u_register,
sum(case when c_registerdate_d between cast('2014-11-01' as datetime) and cast('2014-12-01' as datetime) then 1 else 0 end) as a_register,
sum(case when c_accepttype_c = 1 then 1 else 0 end) as acceptSimple,
sum(case when c_accepttype_c = 2 then 1 else 0 end) as acceptGeneary,
sum(case when c_closedate_d between cast('2014-11-01' as datetime) and cast('2014-12-01' as datetime) then 1 else 0 end) as a_close,
sum(case when c_punishtype_c = 1 then 1 else 0 end) as warnPunish,
sum(case when c_punishtype_c = 2 then 1 else 0 end) as forfeitPunish,
sum(case when c_punishtype_c = 2 then c_pamount_c else 0 end ) as punishMoney,
sum(case when c_punishtype_c = 3 and ISNUMERIC(c_pamount_c) >0 then c_pamount_c else 0 end) as punishAmount,
sum(case when c_punishtype_c = 4 and ISNUMERIC(c_pamount_c) >0 then c_pamount_c else 0 end) as punishCount
from TW group by c_type_c
)t
------解决思路----------------------
group by cube(name)
------解决思路----------------------
select ....
from ....
union all
select '合计', sum(...), sum(...), sum(...),sum(...)
from
------解决思路----------------------
用下临时表 代码就不会看上去 让人看的头晕了
------解决思路----------------------
看着都晕了,你的耐性真大