根据另一行中某些另一列的值将值填充为null列

时间:2013-05-22 08:42:14

标签: sql oracle datastage

我的要求是选择HIST_STARTstatus="CANCELLED" AND table="OUTCOME_STATUS"。 将此值放在HIST_END列中table=("DOC_STATUS" OR "ENTRY_STATUS") AND HIST_END is NULL 例如。第一行和第二行的HIST_END应为12/06/2012(最后一行为HIST_START

ID          HIST_START   HIST_END    Appl Number    code    version STATUS   TABLE
10298337    4/06/2012                 1             I45     1   PENDING      DOC_STATUS
10298337    4/06/2012                 1             I45     1   PENDING      ENTRY_STATUS
10298337    4/06/2012    5/06/2012    1             I45     1   PENDING      OUTCOME_STATUS
10298337    5/06/2012    11/06/2012   1             I45     1   ADM_REV      OUTCOME_STATUS
10298337    11/06/2012   11/06/2012   1             I45     1   BAMERROR     OUTCOME_STATUS
10298337    11/06/2012   12/06/2012   1             I45     1   AWAIT_DOCS   OUTCOME_STATUS
10298337    12/06/2012                1             I45     1   CANCELLED    OUTCOME_STATUS

提前致谢..

1 个答案:

答案 0 :(得分:0)

我相信status =“CANCELED”AND table =“OUTCOME_STATUS”只会为此表中的每个ID提供一行。 但是为了更安全,我在获取hist_start列值时使用Max()。

然后您可以使用以下更新语句来完成工作 -

UPDATE Table_Name t_1
   SET Hist_End = (SELECT MAX(t_2.Hist_Start)
                     FROM Table_Name t_2
                    WHERE t_2.Status = 'CANCELLED'
                      AND t_2."TABLE" = 'OUTCOME_STATUS'
                      AND t_2.Id = t_1.Id)
 WHERE t_1."TABLE" IN ('DOC_STATUS', 'ENTRY_STATUS')
   AND t_1.Hist_End IS NULL;