oracle sql一是多加入

用户名

我想加入四个表以获取具有相同目录和类型的emp的计数,如下所示:

目录

first_char   dir
-------------------
0000         Dir0
1111         Dir1
2222         Dir2

emp_type

type
------
typeA
typeB
typeC

Assigned_num

no      emp_id
-------------------------
1111A   1
1111B   2
0000A   3
1111C   4
2222A   5
2222B   6
0000B   7

emp

id      type
--------------------
1       typeA
2       typeB
3       typeA
4       typeA
5       typeA    
6       typeB
7       typeA

预期产量

dir    type    # of emp
------------------------
Dir0   typeA   2          --> emp_id 3 and 7    
Dir0   typeB   0
Dir0   typeC   0
Dir1   typeA   2          --> emp_id 1 and 4
Dir1   typeB   1          --> emp_id 2
Dir1   typeC   0
Dir2   typeA   1          --> emp_id 5
Dir2   typeB   1          --> emp_id 6
Dir2   typeC   0

我试过了:

SELECT dire.dir, etype.type, COUNT(anum.emp_id)
FROM emp_type etype
JOIN emp empl
ON etype.type = empl.type 
JOIN assigned_num anum 
ON empl.id = anum.emp_id
JOIN directory dire
ON anum.no LIKE dire.first_char  || '%'
GROUP BY dire.dir, etype.type;

但它不会显示目录和类型,其emp计数为0

Nishant Gupta

解决您的问题的方法:

SELECT dir.dir, et.type,COUNT(emp.id) No_Of_Emp
FROM emp_Type et
CROSS JOIN Directory dir
LEFT JOIN assigned_num an
ON an.no LIKE dir.first_char  || '%' 
LEFT JOIN emp
ON et.type = emp.type
AND an.emp_id = emp.id
GROUP BY dir.dir, et.type
ORDER BY dir.dir, et.type

输出:

DIR      TYPE   NO_OF_EMP
=========================
Dir0    typeA    2
Dir0    typeB    0
Dir0    typeC    0
Dir1    typeA    2
Dir1    typeB    1
Dir1    typeC    0
Dir2    typeA    1
Dir2    typeB    1
Dir2    typeC    0

请点击演示的链接:

http://sqlfiddle.com/#!4/e2dd9/59

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章