Добавьте один дополнительный столбец для отображения данных с использованием Oracle - PullRequest
0 голосов
/ 06 мая 2020

У меня есть одна SQL Процедура, которая возвращает мне 2 столбца в качестве результирующих данных. Как показано ниже.

    WITH a 
     AS (SELECT To_char(rj_span_id)               AS SPAN_ID, 
                To_char(rj_maintenance_zone_code) AS MAINT_ZONE_CODE 
         --from NE.MV_SPAN@DB_LINK_NE_VIEWER 
         FROM   app_fttx.span@sat 
         WHERE  Length(rj_span_id) = 21 
                AND ( rj_span_id LIKE ( '%SPN%' ) 
                       OR rj_span_id LIKE ( '%SPQ%' ) 
                       OR rj_span_id LIKE ( '%SPR%' ) 
                       OR rj_span_id LIKE ( '%SPS%' ) ) 
                AND ( rj_span_id LIKE ( '%_BU' ) 
                       OR rj_span_id LIKE ( '%_MP' ) ) 
                AND inventory_status_code = 'IPL' 
                AND rj_maintenance_zone_code = 'INAPAPRR01' 
                --AND (RJ_INTRACITY_LINK_ID IS NULL OR RJ_INTRACITY_LINK_ID = 'NA') 
                AND ( rj_intracity_link_id NOT LIKE ( '%\_9%' ) ESCAPE '\'
                       OR rj_intracity_link_id IS NULL ) 
         UNION ALL 
         SELECT To_char(rj_intracity_link_id)     AS SPAN_ID, 
                To_char(rj_maintenance_zone_code) AS MAINT_ZONE_CODE 
         -- from NE.MV_SPAN@DB_LINK_NE_VIEWER 
         FROM   app_fttx.span@sat 
         WHERE  Length(rj_intracity_link_id) > 8 
                AND Length(rj_intracity_link_id) < 21 
                AND rj_intracity_link_id LIKE ( '%\_9%' ) ESCAPE '\' 
                AND rj_maintenance_zone_code = 'INAPAPRR01' 
                AND inventory_status_code = 'IPL'), 
     b 
     AS (SELECT To_char(span_id)             AS SPAN_ID, 
                To_char(maintenancezonecode) AS MAINT_ZONE_CODE 
         FROM   tbl_fiber_inv_jobs 
         WHERE  span_type = 'INTERCITY' 
                AND maintenancezonecode = 'INAPAPRR01')SELECT span_id, 
       maint_zone_code 
FROM   a 
MINUS 
SELECT span_id, 
       maint_zone_code 
FROM   b; 

И его вывод выглядит следующим образом:

[! [IMG1] [1]] [1]

И есть еще один запрос, который содержит данные 1-го SP в этой таблице

select SPAN_ID, INTRACITY_LINK_ID from TBL_FIBER_VALID_TRANS_DATA;

И ниже вывод

[! [IMG2] [2]] [2]

Итак, теперь я хочу добавить один столбец в первую процедуру, который будет проверять, доступен ли соответствующий SPANID во втором запросе.

Итак, если SPAN ID существует, то в вновь созданный столбец он должен добавить как VALID, а если не существует, он должен добавить как INVALID

ПРИМЕЧАНИЕ

Это был мой способ получить это все сделано. ЕСЛИ мы сможем сделать это в рамках одной процедуры или любым другим способом, тогда это будет оценено.

1 Ответ

1 голос
/ 06 мая 2020

Думаю, вам нужно LEFT JOIN. Попробуйте запрос ниже -

SELECT T.SPAN_ID
      ,MAINT_ZONE_CODE
      ,CASE WHEN VTD.SPAN_ID IS NULL THEN 'INVALID' ELSE 'VALID' END FLAG
FROM (WITH a 
     AS (SELECT To_char(rj_span_id)               AS SPAN_ID, 
                To_char(rj_maintenance_zone_code) AS MAINT_ZONE_CODE 
         --from NE.MV_SPAN@DB_LINK_NE_VIEWER 
         FROM   app_fttx.span@sat 
         WHERE  Length(rj_span_id) = 21 
                AND ( rj_span_id LIKE ( '%SPN%' ) 
                       OR rj_span_id LIKE ( '%SPQ%' ) 
                       OR rj_span_id LIKE ( '%SPR%' ) 
                       OR rj_span_id LIKE ( '%SPS%' ) ) 
                AND ( rj_span_id LIKE ( '%_BU' ) 
                       OR rj_span_id LIKE ( '%_MP' ) ) 
                AND inventory_status_code = 'IPL' 
                AND rj_maintenance_zone_code = 'INAPAPRR01' 
                --AND (RJ_INTRACITY_LINK_ID IS NULL OR RJ_INTRACITY_LINK_ID = 'NA') 
                AND ( rj_intracity_link_id NOT LIKE ( '%\_9%' ) ESCAPE '\' 
                       OR rj_intracity_link_id IS NULL ) 
         UNION ALL 
         SELECT To_char(rj_intracity_link_id)     AS SPAN_ID, 
                To_char(rj_maintenance_zone_code) AS MAINT_ZONE_CODE 
         -- from NE.MV_SPAN@DB_LINK_NE_VIEWER 
         FROM   app_fttx.span@sat 
         WHERE  Length(rj_intracity_link_id) > 8 
                AND Length(rj_intracity_link_id) < 21 
                AND rj_intracity_link_id LIKE ( '%\_9%' ) ESCAPE '\' 
                AND rj_maintenance_zone_code = 'INAPAPRR01' 
                AND inventory_status_code = 'IPL'), 
     b 
     AS (SELECT To_char(span_id)             AS SPAN_ID, 
                To_char(maintenancezonecode) AS MAINT_ZONE_CODE 
         FROM   tbl_fiber_inv_jobs 
         WHERE  span_type = 'INTERCITY' 
                AND maintenancezonecode = 'INAPAPRR01')SELECT span_id, 
       maint_zone_code 
FROM   a 
MINUS 
SELECT span_id, 
       maint_zone_code 
FROM   b) T
LEFT JOIN TBL_FIBER_VALID_TRANS_DATA VTD ON T.span_id = VTD.span_id; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...