создайте прецедент с другим прецедентом в SQL Oracle

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть один вопрос, я создаю представление с большим количеством случаев для представления флага.

Мне нужно привести ПРИМЕР с другим ПРИМЕРОМ, но я не знаю, какой самый простой способ, я не знаю, нужно ли мне каждый раз приводить ПРИМЕР, потому что в этом случае мой SQL может быть очень длинным. Другое решение?

 SELECT

SR.SERVICE_REQUEST_ID,
SR.COMPLAINT_DATE_YYYYMMDD,



-- Contact Center RSF 

CASE
    WHEN CUR_DD.DIVISION IN  ('CX - CC BACK OFFICE 1', 'CX - CC MIDDLE OFFICE')
         THEN 'BUSINESS(BO)'

    WHEN CUR_DD.DIVISION LIKE '%Dispatcher%'
         THEN 'BUSINESS'
         
   WHEN CUR_DD.DIVISION = 'CX - CC INFODESK'
         THEN 'BUSINESS(FO)'         
         
   WHEN CUR_DD.DIVISION LIKE '%FINES%' OR CUR_DD.DIVISION   LIKE '%INAMI%'
         THEN 'FINES'    
           
   WHEN CUR_DD.DIVISION LIKE '%Key Account%'
         THEN 'KASD'         
         
   WHEN CUR_DD.DIVISION LIKE '%Philately %'
         THEN 'PHILATELY' 
         
   WHEN CUR_DD.DIVISION LIKE '%PI%'
   OR CUR_DD.DIVISION LIKE '%Postinfo %'
         THEN 'POSTINFO'       
         
   WHEN CUR_DD.DIVISION = 'CX - CC BACK OFFICE 2'
         THEN 'PRESS' 
          
   WHEN CUR_DD.DIVISION = 'CC FO First Line' OR  CUR_DD.DIVISION  LIKE '%MRS_CC%' OR  CUR_DD.DIVISION  LIKE '%DMM%'   OR  CUR_DD.DIVISION  LIKE '%Parcels%'  OR  CUR_DD.DIVISION  LIKE '%International%'
         THEN 'RESISENTIAL' 
         
   WHEN CUR_DD.DIVISION LIKE '%RSS VIP%'
         THEN 'VIP'      
         
               
         END AS "Contact center RSF",

--SLA Back Office 

CASE 

"CONTACT CENTER RSF" = 'FINES'

THEN YES

END AS "TEST3",
 

введите описание изображения здесь

Комментарии:

1. Здравствуйте и спасибо, я пытаюсь, но у меня есть одно сообщение об ошибке с select . Экран проверки

Ответ №1:

Вы можете вложить CASEs , используя только круглые скобки; например:

 with testTable (x) as (
    select 'one' from dual UNION ALL
    select 'two' from dual
)
select x,
       case (
               case
                when x = 'one' then 1
                when x = 'two' then 2
               end
            )
        when 1 then 'value one'
        when 2 then 'value two'
       end
from testTable
 

Конечно, другим способом может быть переписывание вашего кода, чтобы использовать только один CASE для обработки всех логик, например, это то же самое, что и предыдущий:

 with testTable (x) as (
    select 'one' from dual UNION ALL
    select 'two' from dual
)
select x,
       case
        when x = 'one' then 'value one'
        when x = 'two' then 'value two'
       end
from testTable
 

Для полноты картины учтите, что вы можете использовать более сложные условия CASE , например:

 CASE
    when a = 'kk' and (b=1 or not c = 8) ...
    ...
 

Комментарии:

1. Круглые скобки вокруг вложенного СЛУЧАЯ не нужны: dbfiddle.uk /…

2. Я новичок в SQL, и синтаксис сложный. .