【问题标题】:Oracle Inner Table QueryOracle 内表查询
【发布时间】:2015-08-07 11:46:45
【问题描述】:

我正在尝试在 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 我想要结果集中的一行和一个带有总数的列,即 select * from Book where LE_ID = 1234 和一个带有死书数量的列,即内部查询

但目前,我的查询返回的死行数为 NULL。

内部查询正常工作,但我显然在这里遗漏了一些东西。

【问题讨论】:

  • 请使用示例数据和所需结果编辑您的问题。

标签: oracle join


【解决方案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;

【讨论】:

  • 这很奏效,但您在内部查询中缺少 group by。
  • 是的,抱歉,如果不测试就很难生成正确的查询:)
  • 不用担心。虽然努力!进一步的优化是在内部查询中包含法人实体列表,以便只为我关心的实体找到死实体。
【解决方案2】:

要弄清楚你到底想要做什么有点困难。毕竟,您正在尝试加入计数和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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2015-07-13
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多