-2

共有三个可用的表和列:

Core - EmpID, EmpName
       1, Yagga Boshu

External - ExternalEmpID, ExternalDeptName
           1 , Capegemini

Position - EmpID, Dept  P/S
           1, IT        Primary
           1, Finance   Secondary

我想从以下格式创建视图:

   Emp ID, EmpName, ExternalID, ExternalName, EmpPrimaryDept, EmpSecondaryDept
   1,     Yagga Boshu,  1 ,      CapeGemini  ,  IT,           FINANCE
  1. EmpID 和 EmpName 来自 Core Table。
  2. ExternalID 和 ExternalName 来自于具有核心表的 OneToOne 的外部表
  3. EmpPrimaryDept 和 EmpSecondaryDept 来自具有核心表的 OneToMany 位置表

对于 1) 和 2) 以下查询有效:

select * from CORE ec, EXTERNAL ee
where ec.EMPLOYEEID = ee.ExternalEmpID

如何加入 Position 表,以便如上所述返回一行?

  • 核心中有 20,000 名员工数据。
  • 在您看到 1 Emp ID 的问题中,它们是两个表之间的链接。
  • 我正在使用 Oracle Database 12c 版本 12.1.0.1.0 - 64 位生产
4

2 回答 2

1

也许您只需要LISTAGG在加入您的 3 个辅助部门的表之后。

    select EmpID, ec.EmpName
   , ee.ExternalDeptName
       ee.Dept, 
         LISTAGG(p.dept,',') as 
        'PrimarySecondaryDepts.' from
        CORE ec join EXTERNAL ee 
       on ec.empid =ee.empid join 
       Position p
        ec.empid=p.empid group by empid, 
         ec.empname, 
       ee.ExternalDeptName,
       ee.Dept
于 2019-08-05T09:46:39.823 回答
1

一种方法是在select子句中使用子查询:

select
  c.empid, c.empname, e.externaldeptname,
  (select dept from position p where p.empid = c.empid and p.p_s = 'Primary') as dept1,
  (select dept from position p where p.empid = c.empid and p.p_s = 'Secondary') as dept2
from core c
left join external e on e.externalempid = c.empid
order by c.empid;

您还可以将它们移至from子句:

select
  c.empid, c.empname, e.externaldeptname, p.dept as dept1, s.dept as dept2
from core c
left join external e on e.externalempid = c.empid,
left join (select empid, dept from position where p_s = 'Primary') p on p.empid = c.empid
left join (select empid, dept from position where p_s = 'Secondary') s on s.empid = c.empid
order by c.empid;
于 2019-08-06T04:16:34.627 回答