2015-08-07 2 views
0

Я пытаюсь написать запрос в Oracle, чтобы предоставить итоговые данные активных юридических лиц и неактивных юридических лиц.Oracle Inner Table Query

Запрос до сих пор я это:

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; 
+0

Это сработало, но во внутреннем запросе вы отсутствовали в группе. –

+0

Да, извините, из-за трудного для получения правильного запроса без его тестирования :) – stee1rat

+0

Не стоит беспокоиться. Хорошее усилие, хотя! Дальнейшая оптимизация заключалась бы в том, чтобы включить список юридических лиц во внутренний запрос, чтобы он мог найти мертвые объекты для тех, кого я волнует. –

0

Немного сложно выяснить, что именно вы пытаетесь сделать. В конце концов, вы пытаетесь объединить счет и id, что вряд ли приведет к успеху.

Ваш пример имеет имя «Сущность А». По правилам, указанным в запросе для «мертвых» объектов, их не должно быть. Имя не соответствует этому правилу.

По всей вероятности, вы хотите условную агрегацию. Вот запрос, который я думаю, что получает итоговые по всем лицам:

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;