Я работаю над следующим кодом. То, что я сделал, - это присоединение основной таблицы (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
Любая помощь будет принята с благодарностью, спасибо.