Oracle内表查询

时间:2015-08-07 11:46:45

标签: oracle join

我正在尝试在Oracle中编写一个查询,以提供活跃的法律实体和非活动法律实体的总数。

到目前为止我的查询是:

    select le.Name, b.LE_ID, count(*) As TOTAL, dead.LE_ID as DEAD
    from BOOK b
    left join Legal_Entity le on le.LE_ID = b.LE_ID
    left join 
    (
        select count(LE_ID) as LE_ID
        from BOOK 
        where (Name like '%DUMMY%' or name like '%TEST%' or name like '%DEAD%' or name like '%DO NOT%' or status <> 'Active')
    ) dead on dead.LE_ID = b.LE_ID
    where b.LE_ID = 1234
    group by le.Name, b.LE_ID, dead.LE_ID
    order by b.LE_ID;

我期待的结果是:

    Name        EntityID    Total   Dead

    Entity A    1234        500     200 

即。对于Book.LE_ID = 1234我想在结果集中有一行和一个带有总数的列,即从书中选择*,其中LE_ID = 1234和一个包含死书数量的列,即内部查询

但此刻,我的查询返回NULL表示死行数。

内部查询没有问题,但我在这里显然遗漏了一些东西。

2 个答案:

答案 0 :(得分:1)

我不确定,但不应该是这样的吗?

  select le.Name, b.LE_ID, count(*) As TOTAL, dead.DEAD as DEAD
    from BOOK b
    left join Legal_Entity le on le.LE_ID = b.LE_ID
    left join 
    (
        select LE_ID, count(LE_ID) as DEAD
        from BOOK 
        where (Name like '%DUMMY%' or name like '%TEST%' or name like '%DEAD%' or name like '%DO NOT%' or status <> 'Active') 
        group by LE_ID
    ) dead on dead.LE_ID = b.LE_ID
    where b.LE_ID = 1234
    group by le.Name, b.LE_ID, dead.LE_ID
    order by b.LE_ID;

答案 1 :(得分:0)

要弄清楚你想要做什么有点难。毕竟,您正试图加入计数和id之间的联系,这不太可能导致成功。

您的示例名称为“实体A”。根据查询中为“死”实体指定的规则,应该没有。该名称与此规则不符。

很可能,您需要条件聚合。这是一个我认为可以获得所有实体总数的查询:

select count(*) As TOTAL, 
       sum(case when Name like '%DUMMY%' or name like '%TEST%' or name like '%DEAD%' or name like '%DO NOT%' or status <> 'Active'
                then 1 else 0
           end) as dead
from BOOK b left join
     Legal_Entity le
      on le.LE_ID = b.LE_ID;