SQL:带有连接混淆的递归

SQL: Recursion With a Join Confusion

我将首先列出我正在尝试做的事情,然后我将列出我到目前为止所做的代码。

我在 Application Express 平台上使用 Oracle PL/SQL 编写代码

我有两个表:USERS 和 LEADS。

潜在客户列:LEADID、COMPANYNAME、CONTACTNAME、OWNER

用户列:EMAIL、SUPER、ROLE

外键:

OWNER 是一个外键,指向 USERS 中的 EMAIL

SUPER 是一个外键,指向 USERS 中的 EMAIL

SUPER 是给定人员的主管。 ROLE 是他们在公司的职位

大约有5个级别。 'PEON','MGR','DIR','SRDIR','VP'

Peon 是唯一分配给他们的潜在客户的人。

我正在尝试生成一份报告,其中 returns 行包含以下内容 下属,NUMLEADS

下属是使用该应用程序的用户的直属人员。我有代码

select U.EMAIL as Subordinate
from USERS U
WHERE lower(v('APP_USER')) = U.SUPER

Numleads是下属组织下peon创建的所有leads。我目前有代码可以列出当前用户下的peon数量

select count(*)
from USERS U2
where  U2.ROLE = 'PEON'
start with lower(v('APP_USER')) = U2.EMAIL
connect by NOCYCLE prior U2.email = U2.super

我参与其中,但我对如何在递归序列中引用查询结果感到困惑。我知道我需要查询当前用户下属下的所有 PEONS,将他们与他们关联的所有线索进行 JOIN,然后统计线索数量。但我不确定如何在 SQL.

中订购

非常感谢您的帮助

编辑:感谢 JBrooks

   select U.EMAIL as Sub, count(*) as CreatedAllTime
   from USERS U
   left join USERS UPEON
   on UPEON.EMAIL in
   (
   select UPEON2.EMAIL
   from USERS UPEON2
   where  UPEON2.ROLE = 'PEON'
   start with U.EMAIL = UPEON2.EMAIL
   connect by NOCYCLE prior UPEON2.email = UPEON2.super
   )
   left join LEADS L
   on UPEON.EMAIL = L.OWNER
   where U.EMAIL in
   (
   select U2.EMAIL as Sub
   from USERS U2
   WHERE lower(v('APP_USER')) = U2.SUPER
   )
   group by U.EMAIL
    select U2.Email as Subordinate,
    count(*) as NumLeads
    from USERS U2
    left join LEADS l
    on U2.Email = l.Owner
    where U2.ROLE = 'PEON'
    and lower(v('APP_USER')) in
        (select EMAIL
        from USERS S
        START WITH lower(v('APP_USER')) = lower(S.SUPPER)
        CONNECT BY PRIOR EMAIL = SUPPER)
    group by U2.Email
    order by U2.Email