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

关于 oracle rollup命令的讨论
SQL code

select to_char(a.startdate,'yyyy'), count(*)
  from V_MQBAODANCHEXIAN_NEW_TUANDAN a
 where a.isdname like '%畅通%'
 and a.branchno = 'AEAE00'
 group by rollup (to_char(a.startdate,'yyyy'))


这个SQL,可以得出如下的结果
1 2004 66
2 2005 185
3 2006 343
4 2007 1114
5 2008 1341
6 2009 381970
7 2010 183
8 385202


SQL code

select to_char(a.startdate,'yyyy'), count(*)
  from V_MQBAODANCHEXIAN_NEW_TUANDAN a
 where a.isdname like '%畅通%'
 and a.branchno = 'AEAE00'
 group by to_char(a.startdate,'yyyy')


同样这个SQL,但不要 rollup,得出的结果如如下,请仔细看2009那一行的数字
6 2004 65
1 2005 185
7 2006 342
5 2007 1096
4 2008 1256
2 2009 1199
3 2010 186

SQL code

select count(*)
  from V_MQBAODANCHEXIAN_NEW_TUANDAN a
 where a.isdname like '%畅通%'
 and a.branchno = 'AEAE00'


而这个不分组的SQL,统计出来的的总行数是4329,说明第二个SQL统计的结果是正确的。

为什么加了rollup 统计的数据,连结果都不能保证证确性了昵


------解决方案--------------------
再检查下where后的条件控制
如果两条语句的条件是一样的话,可能是bug吧..没遇到过
------解决方案--------------------
其它年份的数据也不一样,
你几次统计的原始数据有没有变化?