我有一个用户表和三个日志表,我想统计用户的日志信息,现在是每个表单独统计的,如下所示:
统计不同行政区的打印纪录信息:
SELECT XZQ,COUNT(*) dy FROM (SELECT ajjml_zb.XZQ FROM ajjml_zb,printable WHERE trim(ajjml_zb.PKIIB) = trim(printable.PRINTPKIIB))  GROUP BY XZQ
结果:
XZQ    DY                     
------ ---------------------- 
济南市 7                      
青岛市 1                      
泰安市 2                      
烟台市 4                      
淄博市 9  统计不同行政区的借阅纪录信息:
SELECT XZQ,COUNT(*) jy FROM (SELECT ajjml_zb.XZQ FROM ajjml_zb,readtable WHERE trim(ajjml_zb.PKIIB) = trim(readtable.LENDPKIIB))  GROUP BY XZQ
结果:
XZQ    jy 
------ ---------------------- 
济南市 4                      
济宁市 11                     
莱芜市 3                      
临沂市 1                      
青岛市 5                      
泰安市 1                      
威海市 1                      
潍坊市 2                      
烟台市 19                     
枣庄市 3                      
淄博市 7 统计不同行政区的拷贝纪录信息:
SELECT XZQ,COUNT(*) cy FROM (SELECT ajjml_zb.XZQ FROM ajjml_zb,copytable WHERE trim(ajjml_zb.PKIIB) = trim(copytable.COPYPKIIB))  GROUP BY XZQ
结果:
XZQ    CY                     
------ ---------------------- 
烟台市 3                      
淄博市 1   我想一次得到这三个结果,sql语句怎么写?

解决方案 »

  1.   

    我现在这么写的:SELECT a.XZQ 资料所在地,a.jy 借阅次数,b.dy 打印次数,c.cy 拷贝次数 FROM    (SELECT XZQ,COUNT(*) jy FROM (        SELECT ajjml_zb.XZQ FROM ajjml_zb,readtable WHERE trim(ajjml_zb.PKIIB) = trim(readtable.LENDPKIIB) and readtable.LENDTIME between TO_DATE('2009-11-01','YYYY-MM-DD') and TO_DATE('2010-11-02','YYYY-MM-DD'))     GROUP BY XZQ) a,     (SELECT XZQ,COUNT(*) dy FROM (         SELECT ajjml_zb.XZQ FROM ajjml_zb,printable WHERE trim(ajjml_zb.PKIIB) = trim(printable.PRINTPKIIB) and printable.PRINTTIME between TO_DATE('2009-11-01','YYYY-MM-DD') and TO_DATE('2010-11-02','YYYY-MM-DD'))    GROUP BY XZQ) b,     (SELECT XZQ,COUNT(*) cy FROM (         SELECT ajjml_zb.XZQ FROM ajjml_zb,copytable WHERE trim(ajjml_zb.PKIIB) = trim(copytable.COPYPKIIB) and copytable.COPYTIME between TO_DATE('2009-11-01','YYYY-MM-DD') and TO_DATE('2010-11-02','YYYY-MM-DD'))    GROUP BY XZQ) c  WHERE a.XZQ=b.XZQ and a.XZQ=c.XZQ但是只能获取部分结果,如下所示:
    资料所在地  借阅次数                   打印次数                   拷贝次数                   
    ------ ---------------------- ---------------------- ---------------------- 
    烟台市 18                     4                      3                      
    淄博市 7                      9                      1         这样写肯定不对,在线请教高手
      

  2.   


    SELECT ajjml_zb.XZQ,
           sum(decode(ajjml_zb.PKIIB, copytable.COPYPKIIB, 1, 0)) cy,
           sum(decode(ajjml_zb.PKIIB, copytable.LENDPKIIB, 1, 0)) jy,
           sum(decode(ajjml_zb.PKIIB, copytable.PRINTPKIIB, 1, 0)) dy
      FROM ajjml_zb, copytable
     group by XZQ
      

  3.   

    --没测试
    SELECT ajjml_zb.XZQ,
      sum(decode(ajjml_zb.PKIIB, copytable.COPYPKIIB, 1, 0)) cy,
      sum(decode(ajjml_zb.PKIIB, copytable.LENDPKIIB, 1, 0)) jy,
      sum(decode(ajjml_zb.PKIIB, copytable.PRINTPKIIB, 1, 0)) dy
    FROM ajjml_zb,printable,readtable,copytable
    WHERE trim(ajjml_zb.PKIIB) = trim(printable.PRINTPKIIB))
          and trim(ajjml_zb.PKIIB) = trim(readtable.LENDPKIIB)
          and trim(ajjml_zb.PKIIB) = trim(copytable.COPYPKIIB)
    GROUP BY ajjml_zb.XZQ
      

  4.   


    这个好像不行呀,我是三个不同的表,你这只写了copytable,我改成其它两个表名,查询时出现错误
      

  5.   

    SELECT ajjml_zb.XZQ,
           sum(decode(ajjml_zb.PKIIB, printable.PRINTPKIIB, 1, 0)) dy,
           sum(decode(ajjml_zb.PKIIB, readtable.LENDPKIIB, 1, 0)) jy,
           sum(decode(ajjml_zb.PKIIB, copytable.COPYPKIIB, 1, 0)) cy
    FROM ajjml_zb, printable,readtable,copytable
    WHERE trim(ajjml_zb.PKIIB) = trim(printable.PRINTPKIIB)
    AND trim(ajjml_zb.PKIIB) = trim(readtable.LENDPKIIB)
    AND trim(ajjml_zb.PKIIB) = trim(copytable.COPYPKIIB)
    GROUP BY ajjml_zb.XZQ
      

  6.   

    --性能没太考虑
    select SUM(A.dy),SUM(A.jy),SUM(A.cy)
    from (
    SELECT XZQ, COUNT(*) dy,0 as jy,0 as cy
      FROM (SELECT ajjml_zb.XZQ
              FROM ajjml_zb, printable
             WHERE trim(ajjml_zb.PKIIB) = trim(printable.PRINTPKIIB))
     GROUP BY XZQ
     union all
     SELECT XZQ, 0 as dy,COUNT(*) jy,0 as cy
       FROM (SELECT ajjml_zb.XZQ
               FROM ajjml_zb, readtable
              WHERE trim(ajjml_zb.PKIIB) = trim(readtable.LENDPKIIB))
      GROUP BY XZQ
     union all
      SELECT XZQ,0 as dy, 0 as jy,COUNT(*) cy
        FROM (SELECT ajjml_zb.XZQ
                FROM ajjml_zb, copytable
               WHERE trim(ajjml_zb.PKIIB) = trim(copytable.COPYPKIIB))
       GROUP BY XZQ
       ) A
     group by A.XZQ
      

  7.   

    3#和5#的查询结果也不对,只查到一条结果
    XZQ    JY                     DY                     CY                     
    ------ ---------------------- ---------------------- ---------------------- 
    烟台市 0                      0                      216      这样应该是不对的
      

  8.   


    SELECT ajjml_zb.XZQ,
      sum(decode(ajjml_zb.PKIIB, copytable.COPYPKIIB, 1, 0)) cy,
      sum(decode(ajjml_zb.PKIIB, copytable.LENDPKIIB, 1, 0)) jy,
      sum(decode(ajjml_zb.PKIIB, copytable.PRINTPKIIB, 1, 0)) dy
    FROM ajjml_zb,printable,readtable,copytable
    GROUP BY ajjml_zb.XZQ
      

  9.   

    我修改成下面:SELECT ajjml_zb.XZQ,
      sum(decode(ajjml_zb.PKIIB, copytable.COPYPKIIB, 1, 0)) cy,
      sum(decode(ajjml_zb.PKIIB, readtable.LENDPKIIB, 1, 0)) jy,
      sum(decode(ajjml_zb.PKIIB, printable.PRINTPKIIB, 1, 0)) dy
    FROM ajjml_zb,printable,readtable,copytable
    GROUP BY ajjml_zb.XZQ查询了好久没有结果,不知道怎么回事
      

  10.   

    把你的3个结果leftjoin一下就出来了。
      

  11.   

    修改下五楼gelyon
    的 呵呵SELECT ajjml_zb.XZQ,
           sum(decode(ajjml_zb.PKIIB, printable.PRINTPKIIB, 1, 0)) dy,
           sum(decode(ajjml_zb.PKIIB, readtable.LENDPKIIB, 1, 0)) jy,
           sum(decode(ajjml_zb.PKIIB, copytable.COPYPKIIB, 1, 0)) cy
    FROM ajjml_zb, printable,readtable,copytable
    WHERE trim(ajjml_zb.PKIIB) = trim(printable.PRINTPKIIB)
    or trim(ajjml_zb.PKIIB) = trim(readtable.LENDPKIIB)
    or trim(ajjml_zb.PKIIB) = trim(copytable.COPYPKIIB)
    GROUP BY ajjml_zb.XZQ
      

  12.   

    SELECT XZQ,
           COUNT(distinct printable.rowid) dy,
           COUNT(distinct readtable.rowid) jy,
           COUNT(distinct copytable.rowid) cy 
      FROM (SELECT ajjml_zb.XZQ
              FROM ajjml_zb, printable, readtable, copytable
             WHERE trim(ajjml_zb.PKIIB) = trim(printable.PRINTPKIIB)(+)
               and trim(ajjml_zb.PKIIB) = trim(readtable.LENDPKIIB)(+)
               and trim(ajjml_zb.PKIIB) = trim(copytable.COPYPKIIB) (+))
     GROUP BY XZQ
      

  13.   

    select XZQ,count(b.PRINTPKIIB) dy,count(c.LENDPKIIB) jy,count(d.COPYPKIIB) cy
    from ajjml_zb a join printable b on trim(a.PKIIB) = trim(b.PRINTPKIIB)
    join readtable c on trim(a.PKIIB) = trim(c.LENDPKIIB)
    join copytable d on trim(a.PKIIB) = trim(d.COPYPKIIB)
      

  14.   


    select a.XZQ,count(b.PRINTPKIIB) dy,count(c.LENDPKIIB) jy,count(d.COPYPKIIB) cy
    from ajjml_zb a join printable b on trim(a.PKIIB) = trim(b.PRINTPKIIB)
    join readtable c on trim(a.PKIIB) = trim(c.LENDPKIIB)
    join copytable d on trim(a.PKIIB) = trim(d.COPYPKIIB)
    group by a.XZQ