2015-03-16 2 views
0

Можем ли мы повторно использовать ниже запрос без использования объединения. Может быть, мы можем использовать или логический оператор там, где это условие.Query Refactor без объединения

select a.RequestNumber, a.ticket_id as TicketID, a.requester, num_business_days (a.last_modified_date, sysdate) as businessdays,a.REM_MAIL_SENT_DTTS from (SELECT ticket_id, request_number as RequestNumber, created_by as requester, 
    last_modified_date,REM_MAIL_SENT_DTTS 

     From Ri_Ticket_Info 
     Where Status_Id = 6 And REM_MAIL_SENT_DTTS Is Null)A 
     where num_business_days (a.last_modified_date, sysdate) >= 5 

     union 

     select a.RequestNumber, a.ticket_id as TicketID, a.requester, num_business_days (a.last_modified_date, sysdate) as businessdays,a.REM_MAIL_SENT_DTTS from (SELECT ticket_id, request_number as RequestNumber, created_by as requester, 
     last_modified_date,REM_MAIL_SENT_DTTS 

     From Ri_Ticket_Info 
     Where Status_Id = 6 And REM_MAIL_SENT_DTTS Is not Null )A 
     where num_business_days (a.REM_MAIL_SENT_DTTS, sysdate) >= 5 
+0

Вы можете переформатировать код. Очень трудно читать, как сейчас. – jarlh

+0

Я согласен с @ NoDisplayName, что в этом случае нет никакой необходимости для UNION, в будущем вы можете подумать, что когда у вас есть взаимоисключающие условия в обеих частях UNION, UNION ALL намного быстрее. В любое время, когда я пишу оператор UNION, я считаю, что UNION ALL может быть выбором btter. – HLGEM

ответ

2

Я думаю, что это можно переписать как:

SELECT a.requestnumber, 
     a.ticket_id AS ticketid, 
     a.requester, 
     num_business_days (a.last_modified_date, SYSDATE) AS businessdays, 
     a.rem_mail_sent_dtts 
FROM ri_ticket_info a 
WHERE a.status_id = 6 
and num_business_days (nvl(a.rem_mail_sent_dtts, a.last_modified_date), SYSDATE) >= 5; 
+0

Я надеюсь, что над запросом работает. Когда rem_mail_sent_dtts является нулевой функцией num_business_days, первым параметром является a.last_modified_date.Otherwise rem_mail_sent_dtts. – user2211290

1

Вам не нужно никакого логического оператора, Удалить REM_MAIL_SENT_DTTS условие из where п

SELECT a.RequestNumber, 
     a.ticket_id          AS TicketID, 
     a.requester, 
     Num_business_days (a.last_modified_date, sysdate) AS businessdays, 
     a.REM_MAIL_SENT_DTTS 
FROM (SELECT ticket_id, 
       request_number AS RequestNumber, 
       created_by  AS requester, 
       last_modified_date, 
       REM_MAIL_SENT_DTTS 
     FROM Ri_Ticket_Info 
     WHERE Status_Id = 6)A 
WHERE Num_business_days (a.last_modified_date, sysdate) >= 5 
+2

Я думаю, что вы пропустили случай, когда 'REM_MAIL_SENT_DTTS' не является нулевым, OP хочет фильтровать на' num_business_days (a.REM_MAIL_SENT_DTTS, sysdate)> = 5' – Boneist

Смежные вопросы