表一:员工表
字段: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
字段: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
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
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
说 a table may be outer joined to at most one table
-------------------------------------------------------------------------------------------------------------------
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
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
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