我正在尝试在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表示死行数。
内部查询没有问题,但我在这里显然遗漏了一些东西。
答案 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;