简单的就是一个业务 两个表 一个表a放单头,一个表b放明细,一张单子可以有N条明细,两个表用单号关联,我现在需要查询出业务员做了几张单子,以及这些单子总共的明细数
我用的是
select sum(decode(a.单号,null,0,1))单子数量,sum(decode(b.明细,null,0,1))明细数量 from a,b where a.单号= b.单号 
这样查询出来的结果是 单子数量 = 明细数量 
实际上是 单子数量要小于明细数量的

解决方案 »

  1.   

    select count( disinct a.单号) 单子数量,
           count( b.明细) 明细数量 
    from a,b 
    where a.单号= b.单号
    group by a.单号,b.明细正确的话,记得给分哦
      

  2.   

    with 
    tab_a as (select a.单号,b.明细,count( disinct a.单号) 单子数量,
           count( b.明细) 明细数量 
    from a,b 
    where a.单号= b.单号
    group by a.单号,b.明细
    )
    select *
    from tab_a AA
    where AA.明细数量=(select max(BB.明细数量) from tab_a BB
         where AA.单号=BB.单号 and AA.明细=BB.明细
    )
      

  3.   

    select s1.业务员编码, s1.a_单子数量, s1.a_明细数量,  s2.b_单子数量, s2.b_明细数量
    (select a.业务员编码, count( disinct a.单号) a_单子数量, count( b.明细) a_明细数量 
    from a_单头 a ,a_明细 b
    where a.单号= b.单号
    group by a.单号,b.明细 )s1,
    (select a.业务员编码, count( disinct a.单号) b_单子数量, count( b.明细) b_明细数量 
    from b_单头 a ,b_明细 b
    where a.单号= b.单号
    group by a.单号,b.明细 )s2
    where s1.业务员编码 = s2.业务员编码
      

  4.   

    SELECT C.业务编号,C.业务单据数,D.业务明细数
    FROM  (SELECT A.业务编号,COUNT(A.单号) '业务单据数' FROM A ) C,
          (SELECT A.业务编号,COUNT(B.单号) '业务明细数' FROM A,B WHERE A.单号=B.单号    
             GROUP A.业务编号) D
    WHERE C.业务编号=D.业务编号;
      

  5.   

    SELECT C.业务编号,C.业务单据数,D.业务明细数
    FROM  (SELECT A.业务编号,COUNT(A.单号) '业务单据数' FROM A GROUP BY A.业务编号) C,
          (SELECT A.业务编号,COUNT(B.单号) '业务明细数' FROM A,B WHERE A.单号=B.单号    
             GROUP A.业务编号) D
    WHERE C.业务编号=D.业务编号;
      

  6.   

    SELECT C.业务编号,C.业务单据数,D.业务明细数
    FROM  (SELECT A.业务编号,COUNT(A.单号) '业务单据数' FROM A GROUP BY A.业务编号) C,
          (SELECT A.业务编号,COUNT(B.单号) '业务明细数' FROM A,B WHERE A.单号=B.单号    
             GROUP BY A.业务编号) D
    WHERE C.业务编号=D.业务编号;这次绝对OK!