select count(*) into m_yl from lsb_wx where  
            sdsj between to_date(m_qssj,'yyyy-mm-dd')
            and to_date(m_zzsj,'yyyy-mm-dd')+0.99999 
            and czjg in('S216','S226')
            and gh=t.zjygh and gdbh  like :var||'%';var = 'y','z','t'等

解决方案 »

  1.   

    对相同的部分建立一个视图,然后对不同的部分分组统计。
    create or replace view v_test as 
    select substr(gdbh,1,1) GGG  from lsb_wx where  
                sdsj between to_date(m_qssj,'yyyy-mm-dd')
                and to_date(m_zzsj,'yyyy-mm-dd')+0.99999 
                and czjg in('S216','S226')
                and gh=t.zjygh FOR C_I IN (select count(*) CN from v_test group by GGG) LOOP
    DDD:=C_I.CN;
    ....END LOOP;
      

  2.   

    我自己搞定了。        select count(*) ,substr(gdbh,1,1)  from lsb_wx where  
                sdsj between to_date('20020206','yyyy-mm-dd')
                and to_date('20020506','yyyy-mm-dd')+0.99999 
                and czjg in('S216','S226')
               GROUP BY (substr(gdbh,1,1));
    分给不给你们,看我的心情了。