делая дубликаты столбцов как NULL - PullRequest
0 голосов
/ 11 марта 2020

У меня есть следующий запрос

select DISTINCT PCD.CHANGE_ID CHANGE_ID, PCD.STATUS STATUS,ICT2.TASK_ID PARENT_TASK_ID,ICT2.NAME PARENT_TASK_NAME,ICT2.STATUS PARENT_TASK_STATUS, ICT.STATUS INFRA_TASK_STATUS,
ICD.CHANGE_ID INFRA_CHANGE_ID,ICT.TASK_ID INFRA_TASK_ID,ICT.NAME INFRA_TASK_NAME
from 
V_ITSM_REPORT_CHANGE_DATA PCD
JOIN V_ITSM_REPORT_CHANGE_TASK PCT ON PCD.CHANGE_ID=PCT.CHANGE_ID
LEFT JOIN V_ITSM_REPORT_CHANGE_RELATIONS CR ON PCD.CHANGE_ID=CR.REQUEST_ID
LEFT JOIN V_ITSM_REPORT_CHANGE_DATA ICD ON ICD.CHANGE_ID=CR.CHANGE_ID
JOIN V_ITSM_REPORT_CHANGE_TASK ICT ON ICT.CHANGE_ID=ICD.CHANGE_ID
JOIN V_ITSM_REPORT_CHANGE_TASK ICT2 ON ICT2.CHANGE_ID = PCD.CHANGE_ID
JOIN TASK_ORG_TOWER T1 ON T1.T_ASSIGNEE_GROUP = ICT2.ASSIGNEE_GROUP
where 1=1 
AND PCD.CHANGE_ID IN ('CRQ000001349306')
AND PCD.TEMPLATE LIKE 'slc-asset%provision'
--AND PCD.TEMPLATE LIKE '%server-lifecycle:global%'
AND ICT2.STATUS NOT IN ('Staged','Closed')
AND ICT.STATUS NOT IN ('Closed','Staged')
AND PCD.STATUS NOT IN ('Closed','Completed','Cancelled')
And TRUNC(TIMEZONE_CONVERT(PCD.SCHEDULED_START_DATE)) >= to_date('2019-04-29','YYYY-MM-DD');

, и он дает следующий вывод Ageing Report o/p

Лог c - это один открытый change_id может иметь несколько open инфра или дочерняя задача, которая может быть открыта, поэтому в этом запросе я извлекаю один-единственный change_id, поэтому в основном в этих случаях дублируется идентификатор родителя / изменения.

Теперь я хочу сохранить первое отличающееся значение для столбца change_id, status, parent_task_id, parent_task_status и сделать все остальные вхождения для этого столбца равными нулю, так как очевидно, что все эти столбцы повторяются

Выходные данные Я ищу это DEsired o/p

Спасибо, Рейк sh

1 Ответ

0 голосов
/ 11 марта 2020

Вы можете попробовать использовать ROW_NUMBER () и затем использовать CASE для отображения содержимого столбца только в первой строке. Не пытаясь понять ваши данные, я предлагаю следующее:

WITH
 Test_Data AS
    (
    SELECT 'CI 01' AS CHANGE_ID, 'SPTI 01' AS STATUS, 'PTI 01' AS PARENT_TASK_ID, 'PTN 01' AS PARENT_TASK_NAME, 'PTS 01' AS PARENT_TASK_STATUS, 'ITS 01a' AS INFRA_TASK_STATUS, 'ICI 01a' AS INFRA_CHANGE_ID, 'ITI 01a' AS INFRA_TASK_ID, 'ITN 01a' AS INFRA_TASK_NAME FROM DUAL UNION ALL
    SELECT 'CI 01' AS CHANGE_ID, 'SPTI 01' AS STATUS, 'PTI 01' AS PARENT_TASK_ID, 'PTN 01' AS PARENT_TASK_NAME, 'PTS 01' AS PARENT_TASK_STATUS, 'ITS 01b' AS INFRA_TASK_STATUS, 'ICI 01b' AS INFRA_CHANGE_ID, 'ITI 01b' AS INFRA_TASK_ID, 'ITN 01b' AS INFRA_TASK_NAME FROM DUAL UNION ALL
    SELECT 'CI 01' AS CHANGE_ID, 'SPTI 01' AS STATUS, 'PTI 01' AS PARENT_TASK_ID, 'PTN 01' AS PARENT_TASK_NAME, 'PTS 01' AS PARENT_TASK_STATUS, 'ITS 01c' AS INFRA_TASK_STATUS, 'ICI 01c' AS INFRA_CHANGE_ID, 'ITI 01c' AS INFRA_TASK_ID, 'ITN 01c' AS INFRA_TASK_NAME FROM DUAL UNION ALL
    SELECT 'CI 02' AS CHANGE_ID, 'SPTI 02' AS STATUS, 'PTI 02' AS PARENT_TASK_ID, 'PTN 02' AS PARENT_TASK_NAME, 'PTS 02' AS PARENT_TASK_STATUS, 'ITS 02a' AS INFRA_TASK_STATUS, 'ICI 02a' AS INFRA_CHANGE_ID, 'ITI 01c' AS INFRA_TASK_ID, 'ITN 01c' AS INFRA_TASK_NAME FROM DUAL
    )
,Detail AS
    (
    SELECT
         Change_id
        ,Status
        ,Parent_Task_Id
        ,Parent_Task_Name
        ,Parent_Task_Status
        ,Infra_Task_Status
        ,Infra_Change_Id
        ,Infra_Task_Id
        ,Infra_Task_Name
        ,ROW_NUMBER() OVER (PARTITION BY Change_id, Status,Parent_Task_Id, Parent_Task_Name, Parent_Task_Status ORDER BY Infra_Task_Status) AS Test_Condition
    FROM Test_Data
    )
SELECT
     CASE WHEN Test_Condition = 1 THEN Change_id        ELSE NULL END AS Change_id
    ,CASE WHEN Test_Condition = 1 THEN Status           ELSE NULL END AS Status
    ,CASE WHEN Test_Condition = 1 THEN Parent_Task_Id   ELSE NULL END AS Parent_Task_Id
    ,CASE WHEN Test_Condition = 1 THEN Parent_Task_Name ELSE NULL END AS Parent_Task_Name
    ,CASE WHEN Test_Condition = 1 THEN Parent_Task_Status   ELSE NULL END AS Parent_Task_Status
    ,Infra_Task_Status
    ,Infra_Change_Id
    ,Infra_Task_Id
    ,Infra_Task_Name
FROM Detail
;

enter image description here

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