日期:2014-05-17  浏览次数:20856 次

请教如何使用union才能达到想要的效果
请教一下,执行下面的语句查询后
select RID ,sum_eval,s_i_name1,s_i_code1 from TMP_REP_2 WHERE rownum<=5
union
select '前三名', sum_eval,s_i_name1,s_i_code1 FROM TMP_REP_2 WHERE rownum<=3
union
select '前五名', sum_eval,s_i_name1,s_i_code1 FROM TMP_REP_2 WHERE rownum<=5;

输出的结果如下:
1 33060379.4 黑色金属 801040
2 31104500 金融服务 801190
3 24637023.34 机械设备 801070
4 23879016 房地产 801180
5 16744197.44 医药生物 801150
前三名 24637023.34 机械设备 801070
前三名 31104500 金融服务 801190
前三名 33060379.4 黑色金属 801040
前五名 16744197.44 医药生物 801150
前五名 23879016 房地产 801180
前五名 24637023.34 机械设备 801070
前五名 31104500 金融服务 801190
前五名 33060379.4 黑色金属 801040


如何才能得到如下的结果,就是最后2行是前面的数据的合计,但要能在一起显示出来?
1 33060379.4 黑色金属 801040
2 31104500 金融服务 801190
3 24637023.34 机械设备 801070
4 23879016 房地产 801180
5 16744197.44 医药生物 801150
前三名 88801903
前五名 129425116


------解决方案--------------------
select RID ,sum_eval,s_i_name1,s_i_code1 from TMP_REP_2 WHERE rownum<=5
union all
select rid,sum(sum_eva),null,null
(select '前三名' rid, sum_eval,s_i_name1,s_i_code1 FROM TMP_REP_2 WHERE rownum<=3
union
select '前五名' rid, sum_eval,s_i_name1,s_i_code1 FROM TMP_REP_2 WHERE rownum<=5) group by rid;
------解决方案--------------------
select RID ,sum_eval,s_i_name1,s_i_code1 from TMP_REP_2 WHERE rownum<=5
union all
select rid,sum(sum_eval),null,null
from (select '前三名' rid, sum_eval,s_i_name1,s_i_code1 FROM TMP_REP_2 WHERE rownum<=3
union
select '前五名' rid, sum_eval,s_i_name1,s_i_code1 FROM TMP_REP_2 WHERE rownum<=5) group by rid;