表一:员工表
  字段:EMP_ID ,EMP_Name
表二:任务表
  字段:Task_ID, TASK_TYPE_ID,EMP_ID
表三:任务码表
  字段:Task_TYPE_ID, TASK_TYPE_NAME通过EMP_ID连接1,2
通过TASK_TYPE_ID连接3,2表一有3条数据:
    EMP_ID EMP_Name
1.    001    mich   
2.    002    jong
3.    003    xxxx表二有4条数据:Task_ID  TASK_TYPE_ID  EMP_ID
   001      1           001
   002      2           001
   003      1           001
   004      2           002表三有2条数据:
Task_TYPE_ID  TASK_NAME
     1          TYPE1     
     2          TYPE2     想通过查询得到以下效果:  EMP_ID Task_TYPE_ID   数量 
    001      1           2
    001      2           1
    002      1           0
    002      2           1
    003      1           0
    003      2           0

解决方案 »

  1.   

    select
        a.EMP_ID,b.Task_TYPE_ID,NVL(COUNT(c.Task_ID),0) as 数量
    from 
        表一 a,表三 b,表二 c
    where
        a.EMP_ID=c.EMP_ID(+) and b.Task_TYPE_ID=c.Task_TYPE_ID(+)
    group by
        a.EMP_ID,b.Task_TYPE_ID
      

  2.   

    select
        a.EMP_ID,
        b.Task_TYPE_ID,
        NVL(COUNT(c.Task_ID),0) as 数量
    from 
        表一 a
    cross join
        表三 b
    left join
        表二 c
    on
        a.EMP_ID=c.EMP_ID and b.Task_TYPE_ID=c.Task_TYPE_ID
    group by
        a.EMP_ID,b.Task_TYPE_ID
      

  3.   

    第一种好像提示不对
    说 a table may be outer joined to at most one table
      

  4.   

    没有环境测试,改成子查询如何?
    -------------------------------------------------------------------------------------------------------------------
    select
        a.EMP_ID,a.Task_TYPE_ID,NVL(COUNT(b.Task_ID),0) as 数量
    from 
        (select c.EMP_ID,d.Task_TYPE_ID from 表一 c,表三 d where 1=1) a,
        表二 b
    where
        a.EMP_ID=b.EMP_ID(+) and a.Task_TYPE_ID=b.Task_TYPE_ID(+)
    group by
        a.EMP_ID,a.Task_TYPE_ID
      

  5.   

    第2中正确!!!子陌兄,再问一个问题如果表2加上日期字段呢,能得到每一天的结果吗查询如下:
      EMP_ID   日期          Task_TYPE_ID      数量 
        001    2006-3-1            1            2
        001    2006-3-1            2            2
        001    2006-3-2            1            5
        001    2006-3-2            2            3
        001    2006-3-3            1            0
        001    2006-3-3            2            0
                  .
                  .
                  .
                  .
                  .
    每一天都列出来,即使表中没有这天的数据也显示为0
      

  6.   

    select
        a.EMP_ID,b.日期,c.Task_TYPE_ID,NVL(COUNT(d.Task_ID),0) as 数量
    from
        表一 a
    cross join
        (select distinct 日期 from 表二) b
    cross join
        表三 c
    left join
        表二 d
    on
        a.EMP_ID=d.EMP_ID and b.日期=d.日期 and c.Task_TYPE_ID=d.Task_TYPE_ID
    group by
        a.EMP_ID,b.日期,c.Task_TYPE_ID
    order by
        a.EMP_ID,b.日期,c.Task_TYPE_ID