机动车检测表(车牌号   VARCHAR(10),检测日期   DATETIME,...)     报表格式如下   
  车牌号       1     2     3     4     5     6     7     8     9     10     ...31   
   
  如果车牌号为0561的1号做过检测,则1号下面,填1,否则为0   
  后面的车,和日期等同 
  检测表里,如果今天一辆车做过检测就有一条记录在   
  问,怎么样才能得到上面报表的统计数量.
  知道答案的请告诉我可以吗?写一个oracle存储过程.先谢谢了!

解决方案 »

  1.   

    http://topic.csdn.net/u/20070830/22/3adc7d42-961e-40ed-b1de-29368c0015dc.html
    他写的是sql-server下的,oracle下要转换下
      

  2.   

    这个很麻烦啊,之前我做过这样的统计,不过当时因为都是数据的累加所以用decode做的,现在这个好像decode不好做啊明天再想想
      

  3.   

    1 记录按 车号+年月日 group by
    2 在1的基础上按车号排序(其实1应该已经做好了)
    3 按1的SQL语句打开游标,扫描记录
    4 那天有值就在对应列赋值(如果没这个车记录先X一条)
    5 扫描完了就搞定BTW 代码就不写了类似是sql:='select 车号,年月日 from 表 where 年月='''||X年X月||'''group by 车号,年月日 ';
    open cCur for sql
    loop
      fetch cCur into X,Y;
      exit when cCur%NOTFOUND;
      然后就边扫描边更新记录....end loop;
      

  4.   

    用decode也可以做的,必竟也可以算固定列的,就是要写31个decode
    select 车牌号 ,to_char(检测日期 ,'yyyymm') 月份
                  sum(decode(to_char(检测日期 ,'dd'),'01',1,0)) “1”
                    sum(decode(to_char(检测日期 ,'dd'),'02',1,0)) “2”
                    sum(decode(to_char(检测日期 ,'dd'),'03',1,0)) “3”
                     .
                   .
                   .
                   .
                   .
                  sum(decode(to_char(检测日期 ,'dd'),'31',1,0)) “31”
    from a
    where 检测日期  between 日期范围
          group by 车牌号 ,to_char(检测日期 ,'yyyymm')
      

  5.   

    9楼你有更好的方法吗?
    8楼的我想只要在sum用decode转换一下就可以得到我想要的功能了!@