将一个sql查询的结果组合到另一个sql查询中

将一个sql查询的结果组合到另一个sql查询中,sql,oracle,Sql,Oracle,我有下表 CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS SELECT 10, 1 FROM DUAL UNION ALL SELECT 12, 1 FROM DUAL UNION ALL SELECT 10, 1 FROM DUAL UNION ALL SELECT 12, 1 FROM DUAL UNION ALL SELECT 12, 1 FROM DUAL UNION ALL SELECT

我有下表

CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 14, 1 FROM DUAL;
下面的查询分组并统计员工的学分总数

select Employee_id, count(*) as "Total_credits"
from Employee_id_credits
group by Employee_id;
给出以下输出

Employee_id Total_credits
----------- -------------
         10             2
         12             3
         14             1
我有一个具有层次结构的Employee Manager表

CREATE TABLE Employee_Manager ( Employee_id, Manager_id ) AS
  SELECT  10, 101  FROM DUAL UNION ALL
  SELECT  12, 120  FROM DUAL UNION ALL
  SELECT  13, 120  FROM DUAL UNION ALL
  SELECT  14, 150  FROM DUAL UNION ALL
  SELECT 101, NULL FROM DUAL UNION ALL
  SELECT 120, 130  FROM DUAL UNION ALL
  SELECT 130, NULL FROM DUAL;
我有一个查询来查找该员工的最高级别经理

SELECT
  Employee_id
FROM 
  Employee_Manager
WHERE
  Manager_id is null
CONNECT BY PRIOR
  Manager_id = Employee_id
START WITH
  Employee_id = '12';
我想将以上两个查询组合起来,以便输出如下所示。如何组合这两个查询

Manager Total_credits
------- -------------
    101             2
    130             3
    150             1

Oracle 11g R2架构设置

CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 14, 1 FROM DUAL;

CREATE TABLE Employee_Manager ( Employee_id, Manager_id ) AS
  SELECT  10, 101  FROM DUAL UNION ALL
  SELECT  12, 120  FROM DUAL UNION ALL
  SELECT  13, 120  FROM DUAL UNION ALL
  SELECT  14, 150  FROM DUAL UNION ALL
  SELECT 101, NULL FROM DUAL UNION ALL
  SELECT 120, 130  FROM DUAL UNION ALL
  SELECT 130, NULL FROM DUAL;
SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
       COALESCE( manager_id, employee_id ) AS manager_id
FROM   Employee_manager
WHERE  CONNECT_BY_ISLEAF = 1
CONNECT BY PRIOR Manager_id = Employee_id
| EMPLOYEE_ID | MANAGER_ID |
|-------------|------------|
|          10 |        101 |
|          12 |        130 |
|          13 |        130 |
|          14 |        150 |
|         101 |        101 |
|         120 |        130 |
|         130 |        130 |
SELECT m.manager_id,
       SUM( c.credits ) As total_credits
FROM   Employee_id_credits c
       INNER JOIN
       (
         SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
                COALESCE( manager_id, employee_id ) AS manager_id
         FROM   Employee_manager
         WHERE  CONNECT_BY_ISLEAF = 1
         CONNECT BY PRIOR Manager_id = Employee_id
       ) m
       ON ( c.employee_id = m.employee_id )
GROUP BY m.manager_id
| MANAGER_ID | TOTAL_CREDITS |
|------------|---------------|
|        101 |             2 |
|        130 |             3 |
|        150 |             1 |
查询1-查找每位员工的经理

CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 14, 1 FROM DUAL;

CREATE TABLE Employee_Manager ( Employee_id, Manager_id ) AS
  SELECT  10, 101  FROM DUAL UNION ALL
  SELECT  12, 120  FROM DUAL UNION ALL
  SELECT  13, 120  FROM DUAL UNION ALL
  SELECT  14, 150  FROM DUAL UNION ALL
  SELECT 101, NULL FROM DUAL UNION ALL
  SELECT 120, 130  FROM DUAL UNION ALL
  SELECT 130, NULL FROM DUAL;
SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
       COALESCE( manager_id, employee_id ) AS manager_id
FROM   Employee_manager
WHERE  CONNECT_BY_ISLEAF = 1
CONNECT BY PRIOR Manager_id = Employee_id
| EMPLOYEE_ID | MANAGER_ID |
|-------------|------------|
|          10 |        101 |
|          12 |        130 |
|          13 |        130 |
|          14 |        150 |
|         101 |        101 |
|         120 |        130 |
|         130 |        130 |
SELECT m.manager_id,
       SUM( c.credits ) As total_credits
FROM   Employee_id_credits c
       INNER JOIN
       (
         SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
                COALESCE( manager_id, employee_id ) AS manager_id
         FROM   Employee_manager
         WHERE  CONNECT_BY_ISLEAF = 1
         CONNECT BY PRIOR Manager_id = Employee_id
       ) m
       ON ( c.employee_id = m.employee_id )
GROUP BY m.manager_id
| MANAGER_ID | TOTAL_CREDITS |
|------------|---------------|
|        101 |             2 |
|        130 |             3 |
|        150 |             1 |

CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 14, 1 FROM DUAL;

CREATE TABLE Employee_Manager ( Employee_id, Manager_id ) AS
  SELECT  10, 101  FROM DUAL UNION ALL
  SELECT  12, 120  FROM DUAL UNION ALL
  SELECT  13, 120  FROM DUAL UNION ALL
  SELECT  14, 150  FROM DUAL UNION ALL
  SELECT 101, NULL FROM DUAL UNION ALL
  SELECT 120, 130  FROM DUAL UNION ALL
  SELECT 130, NULL FROM DUAL;
SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
       COALESCE( manager_id, employee_id ) AS manager_id
FROM   Employee_manager
WHERE  CONNECT_BY_ISLEAF = 1
CONNECT BY PRIOR Manager_id = Employee_id
| EMPLOYEE_ID | MANAGER_ID |
|-------------|------------|
|          10 |        101 |
|          12 |        130 |
|          13 |        130 |
|          14 |        150 |
|         101 |        101 |
|         120 |        130 |
|         130 |        130 |
SELECT m.manager_id,
       SUM( c.credits ) As total_credits
FROM   Employee_id_credits c
       INNER JOIN
       (
         SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
                COALESCE( manager_id, employee_id ) AS manager_id
         FROM   Employee_manager
         WHERE  CONNECT_BY_ISLEAF = 1
         CONNECT BY PRIOR Manager_id = Employee_id
       ) m
       ON ( c.employee_id = m.employee_id )
GROUP BY m.manager_id
| MANAGER_ID | TOTAL_CREDITS |
|------------|---------------|
|        101 |             2 |
|        130 |             3 |
|        150 |             1 |
查询2-将其与credits表连接并聚合

CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 14, 1 FROM DUAL;

CREATE TABLE Employee_Manager ( Employee_id, Manager_id ) AS
  SELECT  10, 101  FROM DUAL UNION ALL
  SELECT  12, 120  FROM DUAL UNION ALL
  SELECT  13, 120  FROM DUAL UNION ALL
  SELECT  14, 150  FROM DUAL UNION ALL
  SELECT 101, NULL FROM DUAL UNION ALL
  SELECT 120, 130  FROM DUAL UNION ALL
  SELECT 130, NULL FROM DUAL;
SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
       COALESCE( manager_id, employee_id ) AS manager_id
FROM   Employee_manager
WHERE  CONNECT_BY_ISLEAF = 1
CONNECT BY PRIOR Manager_id = Employee_id
| EMPLOYEE_ID | MANAGER_ID |
|-------------|------------|
|          10 |        101 |
|          12 |        130 |
|          13 |        130 |
|          14 |        150 |
|         101 |        101 |
|         120 |        130 |
|         130 |        130 |
SELECT m.manager_id,
       SUM( c.credits ) As total_credits
FROM   Employee_id_credits c
       INNER JOIN
       (
         SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
                COALESCE( manager_id, employee_id ) AS manager_id
         FROM   Employee_manager
         WHERE  CONNECT_BY_ISLEAF = 1
         CONNECT BY PRIOR Manager_id = Employee_id
       ) m
       ON ( c.employee_id = m.employee_id )
GROUP BY m.manager_id
| MANAGER_ID | TOTAL_CREDITS |
|------------|---------------|
|        101 |             2 |
|        130 |             3 |
|        150 |             1 |

CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 10, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 12, 1 FROM DUAL UNION ALL
  SELECT 14, 1 FROM DUAL;

CREATE TABLE Employee_Manager ( Employee_id, Manager_id ) AS
  SELECT  10, 101  FROM DUAL UNION ALL
  SELECT  12, 120  FROM DUAL UNION ALL
  SELECT  13, 120  FROM DUAL UNION ALL
  SELECT  14, 150  FROM DUAL UNION ALL
  SELECT 101, NULL FROM DUAL UNION ALL
  SELECT 120, 130  FROM DUAL UNION ALL
  SELECT 130, NULL FROM DUAL;
SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
       COALESCE( manager_id, employee_id ) AS manager_id
FROM   Employee_manager
WHERE  CONNECT_BY_ISLEAF = 1
CONNECT BY PRIOR Manager_id = Employee_id
| EMPLOYEE_ID | MANAGER_ID |
|-------------|------------|
|          10 |        101 |
|          12 |        130 |
|          13 |        130 |
|          14 |        150 |
|         101 |        101 |
|         120 |        130 |
|         130 |        130 |
SELECT m.manager_id,
       SUM( c.credits ) As total_credits
FROM   Employee_id_credits c
       INNER JOIN
       (
         SELECT CONNECT_BY_ROOT( Employee_id ) AS Employee_id,
                COALESCE( manager_id, employee_id ) AS manager_id
         FROM   Employee_manager
         WHERE  CONNECT_BY_ISLEAF = 1
         CONNECT BY PRIOR Manager_id = Employee_id
       ) m
       ON ( c.employee_id = m.employee_id )
GROUP BY m.manager_id
| MANAGER_ID | TOTAL_CREDITS |
|------------|---------------|
|        101 |             2 |
|        130 |             3 |
|        150 |             1 |

请不要发布表的图像-将其作为文本发布(或者,更好的是,对于您的输入数据,发布表的DDL和数据的DML,以便我们可以轻松复制/粘贴)。