Ссылка на значение из столбца select в предложении where: Oracle - PullRequest
0 голосов
/ 26 ноября 2018

Мои таблицы следующие:

MS_ISM_ISSUE

ISSUE_ID  ISSUE_DUE_DATE  ISSUE_SOURCE_TYPE
I1        25-11-2018      1
I2        25-12-2018      1
I3        27-03-2019      2

MS_ISM_SOURCE_SETUP

SOURCE_ID MODULE_NAME
1         IT-Compliance
2         Risk Assessment

Я написал следующеезапрос.

with rs as
(select 
count(ISSUE_ID) as ISSUE_COUNT, src.MODULE_NAME, 
case 
when ISSUE_DUE_DATE<sysdate then 'Overdue'
when ISSUE_DUE_DATE between sysdate and sysdate + 90 then 'Within 3 months'
when ISSUE_DUE_DATE>sysdate+90 then 'Beyond 90 days'
end as date_range
from MS_ISM_ISSUE issue, MS_ISM_SOURCE_SETUP src
where issue.Issue_source_type = src.source_id
group by src.MODULE_NAME, case 
when ISSUE_DUE_DATE<sysdate then 'Overdue'
when ISSUE_DUE_DATE between sysdate and sysdate + 90 then 'Within 3 months'
when ISSUE_DUE_DATE>sysdate+90 then 'Beyond 90 days'
end)  
select ISSUE_COUNT,MODULE_NAME, DATE_RANGE,
(select count(ISSUE_COUNT) from rs where rs.MODULE_NAME=MODULE_NAME) as total from rs;

Вывод кода следующий:

ISSUE_COUNT  MODULE_NAME      DATE_RANGE     Total
1            IT-Compliance    Overdue           3
1            IT-Compliance    Within 3 months   3
1            Risk Assessment  Beyond 90 days    3

Результат верен до 3-го столбца.В 4-м столбце я хочу указать общее количество проблем для данного имени модуля.Следовательно, в приведенном выше случае столбец Total будет иметь значение 2 для первой и второй строки (поскольку существует 2 проблемы для соответствия требованиям IT) и значение 1 для третьей строки (поскольку для оценки риска присутствует одна проблема).

По сути, я хочу добиться, чтобы заменить MODULE_NAME текущей строки в последнем предложении where.Как мне добиться этого с помощью запроса?

1 Ответ

0 голосов
/ 26 ноября 2018

ОК, это условие

where rs.MODULE_NAME=MODULE_NAME

по существу такое же, как если бы вы написали

where MODULE_NAME = MODULE_NAME

, что просто всегда верно (если в имени_модуля нет нулей).

Попробуйте использовать разные псевдонимы таблицы для внутреннего и внешнего запроса, например,

select count(ISSUE_COUNT) from rs rs2 where rs2.MODULE_NAME=rs.MODULE_NAME

Вы также можете попробовать использовать аналитическую функцию здесь, что-то вроде

select ISSUE_COUNT,
       MODULE_NAME,
       DATE_RANGE,
       COUNT(ISSUE_COUNT) OVER (PARTITION BY RS.MODULE_NAME) AS TOTAL
  from rs

вместо вашего подзапроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...