最近做一个统计报表查询,需要两个查询,一个查出统计数据,一个查出统计数据的合计,用union把两个查询结果拼成一个,但后一个查询结果却在前一个查询结果之前,不是我想要的,我想要的是无论什么情况,合计的数据始终在统计数据后面,目前我的解决方法是在第一位添一个字段,如:
SELECT ROWNUM RN,FIELD1,FIELD2 FROM TABLE1
       UNION SELECT RN 10000,' ' FIELD1,SUM(FIELD2) FIELD2 FROM TABLE2
因为union默认应该按2个查询结果的第一个字段进行排序的,所以只要第一个查询结果不超过10000,就始终在第二个查询结果之前。
但这种'解决方法'也不是个真正的解决方法,实在想不出什么其他的办法了,特向高手求救!!!

解决方案 »

  1.   

    SELECT * 
    FROM
    (
    SELECT ROWNUM RN,FIELD1,FIELD2,'1' id  FROM TABLE1 
    UNION SELECT RN 10000,' ' FIELD1,SUM(FIELD2) FIELD2,'2' id FROM TABLE2 
    )
    ORDER BY ID,FIELD1
      

  2.   

    简单啊,把UNION 换成 UNION ALL 就可以了。
      

  3.   

    貌似不用union,用ROLLUP 就能实现汇总统计。
      

  4.   

    你用union all试试union有distinct的功能,所以会排序,但union all是简单的合并,应该不会排序。
      

  5.   

    SELECT 1,FIELD1,FIELD2 FROM TABLE1 
    UNION SELECT 2,' ' FIELD1,SUM(FIELD2) FIELD2 FROM TABLE2 
    order by 1;
    2永远大于1,肯定会排在最后。
      

  6.   

    用UNION ALL,问题解决!还有jdsnhan提的rollup,cube函数确实是统计的好工具,不过我这报表是把每个组的合计做为新增的列插在表的最后列,而组的合计作为一行插入表的最后行,还是得自己用sum函数统计。谢谢大家,满意结账!