Вернуть NULL, если предложение WHERE не совпадает - ORACLE - PullRequest
0 голосов
/ 29 ноября 2018

Я боролся с этим большую часть дня сейчас.Я относительно рано в своей жизни Oracle SQL, но мне нужно вернуть результаты, где ldl_act_type.act_type_sc равно 'LID DATE LOGGED', и вытащить ldl_act.date_actioned для этого.

Однако мне также нужноэто обнулить эти значения, если act_type_sc не найден (по существу, все еще возвращает строку, потому что нам нужно увидеть, где действие еще не было предпринято).Я возился с UNION и UNION ALL, но не думаю, что достаточно уяснил это.Надеюсь, приведенный ниже код имеет смысл?

select 
    incident.incident_ref,
    incident.short_desc "Summary",
    serv_dept.serv_dept_n "Assigned SVD",
    inc_data.event_type,
    incident.date_logged "Date Logged",
    ldl_act.date_actioned "LID Date Logged",
    prp_act.date_actioned "Proposed LID Date",
    prp_act.remarks "Proposed LID Comments"
from 
    incident
    inner join serv_dept on incident.ass_svd_id = serv_dept.serv_dept_id
    inner join inc_data on incident.incident_id = inc_data.incident_id
    left join act_reg ldl_act on incident.incident_id = ldl_act.incident_id
    left join act_reg prp_act on incident.incident_id = prp_act.incident_id
    left join act_type ldl_act_type on ldl_act.act_type_id = 
ldl_act_type.act_type_id
    left join act_type prp_act_type on prp_act.act_type_id = 
prp_act_type.act_type_id
where 
    (inc_data.event_type = 'p')
    and (incident.date_logged > (sysdate-30))
    and (prp_act_type.act_type_sc = 'PROPOSED LID DATE')
    and (ldl_act_type.act_type_sc = 'LID DATE LOGGED')

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018
select incident.incident_ref,
incident.short_desc "Summary",
serv_dept.serv_dept_n "Assigned SVD",
inc_data.event_type,
incident.date_logged "Date Logged",
ldl_act.date_actioned "LID Date Logged",
prp_act.date_actioned "Proposed LID Date",
prp_act.remarks "Proposed LID Comments"
from incident
inner join serv_dept on incident.ass_svd_id = serv_dept.serv_dept_id
inner join inc_data on incident.incident_id = inc_data.incident_id
left join (select ldl_act.incident_id,ldl_act_type.act_type_sc from act_reg ldl_act 
            inner join act_type ldl_act_type on ldl_act.act_type_id = 
ldl_act_type.act_type_id) 
            as ldl_act_type on incident.incident_id = ldl_act.incident_id
left join (select prp_act.incident_id,prp_act_type.act_type_sc from act_reg prp_act 
            inner join act_type prp_act_type on prp_act.act_type_id = 
prp_act_type.act_type_id) 
            as prp_act_type on incident.incident_id = prp_act.incident_id
where (inc_data.event_type = 'p')
and (incident.date_logged > (sysdate-30))
and (prp_act_type.act_type_sc = 'PROPOSED LID DATE')
and (ldl_act_type.act_type_sc = 'LID DATE LOGGED')

Можете ли вы попробовать это?

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

Итак, если я правильно понял, вы хотите, чтобы строка присутствовала, если ldl_act_type.act_type_sc = 'LID DATE LOGGED' или ее нет?Это немного сбивает с толку, потому что к вам присоединились act_type дважды, и мне не ясно, как они связаны друг с другом.

Так что вы не хотите просто изменить свое последнее предложение на:

and ( ldl_act_type.act_type_sc = 'LID DATE LOGGED' OR 
      ldl_act_type.act_type_sc IS NULL )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...