Объединение таблиц и выбор максимальных дат - PullRequest
0 голосов
/ 09 января 2019

Я работаю над следующим кодом. То, что я сделал, - это присоединение основной таблицы (WORKLOAD_RPTG) к таблице HISTORY, которая будет вытягивать все статусы и даты соответствующих запросов, предложений и контрактов.

В таблице WORKLOAD_RPTG есть поля ID для запросов, заявок и контрактов. Некоторые из них могут иметь значение NULL, а некоторые могут повторяться, например, один и тот же REQ_ID может генерировать 2 или более контрактов с различными CNTRCT_IDs.

В таблице HISTORY есть поле REF_ID. В зависимости от того, как это соединено с таблицей WORKLOAD, вы извлекаете историю статуса контракта, заявки или запроса. Я хочу перенести всю эту информацию в один отчет, а не запускать его три раза, а затем выполнить кучу сопоставлений и консолидации позже.

Я хочу иметь только одну строку для каждого элемента (он может иметь либо идентификатор контракта / предложения / запроса, либо может иметь все, если он прошел через каждый процесс) с последними статусом и датой. Использование запроса ниже приводит к выводу, подобному этому:

CONID - BIDID - REQID - CONSTAT - CONSTAT_DT - BIDSTAT - BIDSTAT_DT ...
ABC12           98765   Opened    01/01/2018   NULL      NULL
ABC12           98765   Closed    02/02/2018   NULL      NULL
ABC34   DEF67   86420   Opened    03/03/2018   Tendered  01/01/2018
ABC34   DEF67   86420   Opened    03/03/2018   Closed    02/02/2018
ABC34   DEF67   86420   Closed    04/04/2018   Tendered  01/01/2018
ABC34   DEF67   86420   Closed    04/04/2018   Closed    02/02/2018
        DEF89   86420   NULL      NULL         Tendered  03/03/2018

тогда как я хотел бы, чтобы это выглядело так:

CONID - BIDID - REQID - CONSTAT - CONSTAT_DT - BIDSTAT - BIDSTAT_DT ...
ABC12           98765   Closed    02/02/2018   NULL      NULL
ABC34   DEF67   86420   Closed    04/04/2018   Closed    02/02/2018
        DEF89   86420   NULL      NULL         Closed    04/04/2018

Я пытался использовать функцию MAX для дат, но некоторые Контракты никогда не отправлялись в Bid, поэтому значения NULLS приводили к тому, что эти записи выпадали из окончательного отчета (т. Е. Я потеряю все записи Контракта # ABC12 и Предложение № DEF89 выше).

Я подозреваю, что мне нужно использовать подзапрос, но я чешу голову, где вообще начинать. Мой текущий запрос ниже:

SELECT   WOR.CNTRCT_ID, WOR.BID_ID, WOR.REQ_ID, 
     WOR.PROJ_NM, WOR.BUYER, REQ.ITEM_TYP_CD, 
     CUS.CUST_REQ_CNTCT_NM, 
     TRA1.TRANS_STAT_CD, 
     TRA1.TRANS_STAT_EFF_DT, TRA1.TRANS_STAT_HIST_ID, 
     TRA2.TRANS_STAT_CD, 
     TRA2.TRANS_STAT_EFF_DT, TRA2.TRANS_STAT_HIST_ID, 
     TRA3.TRANS_STAT_CD, 
     TRA3.TRANS_STAT_EFF_DT, TRA3.TRANS_STAT_HIST_ID  
FROM     dbo.REQ REQ, 
     dbo.CUST_REQ CUS, 
     dbo.WORKLOAD_RPTG WOR
     LEFT OUTER JOIN dbo.TRANS_STAT_HIST TRA1 ON CNTRCT_ID=TRA1.REF_ID  
     LEFT OUTER JOIN dbo.TRANS_STAT_HIST TRA2 ON BID_ID=TRA2.REF_ID  
     LEFT OUTER JOIN dbo.TRANS_STAT_HIST TRA3 ON CAST(REQ_ID as CHAR)=CAST(TRA3.REF_ID as CHAR) 
WHERE    REQ.REQ_ID=CUS.REQ_ID 
AND      WOR.CUST_REQ_ID=CUS.CUST_REQ_ID 
AND      WOR.WRK_LD_RPT_STAT = 'WIP' 
ORDER BY 10, 5

Любая помощь будет принята с благодарностью, спасибо.

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