Вопрос SQL, ищущий значение в той же самой таблице - PullRequest
0 голосов
/ 29 января 2019

Попытка использовать самостоятельное соединение в SQL, чтобы найти значение в таблице и применить его.

Вот что я получил:

+ ----------------- + ----- + -------- + ----------- +

|Acutal Output ||||

+ ----------------- + ----- + -------- + ---------- +

|TRKID |Fac |NewFac |BAG_TRKID |

|449 |11 |11 |999 |

|473 |11 |11 |737 |

|477 |11 |11 |737 |

|482 |11 |11 |737 |

|737 |89 |89 ||


|Желаемый Out Put ||||

|TRKID |Fac |NewFac |BAG_TRKID |

|449 |11 |11 |999 |

|473 |11 |89 |737 |

|477 |11 |89 |737 |

|482 |11 |89 |737 |

|737 |89 |89 ||

+ ----------------- + ----- + -------- + ---------- +

Вот код ниже.Кажется, я не могу получить тот стол, который хочу.Сумка Номер объекта TrkID не становится номером нового объекта TrkID.

Select 
    TABLEA.TRKID,
    TABLEA.FAC,
    NVL(TABLEA.FAC, TABLEB.FAC) as NEWFAC,
    TABLEA.BAG_TRKID        

FROM
    (
    Select
    HSD. TRKID,
    HSD.NLPT as FAC,
    SBPD.BAG_TRKID
    From
    HSD
    LEFT JOIN
    SBPD
    ON
    SBPD.BAG_TRKID = HSD. TRKID

Where
    HSD.SCANDT BETWEEN   ‘Yesterday’ and ‘Today’
) TABLEA

LEFT JOIN
(
    Select
    HSD. TRKID,
    HSD.NLPT as FAC,
    SBPD.BAG_TRKID
    From
    HSD
    LEFT JOIN
    SBPD
    ON
    SBPD.BAG_TRKID = HSD. TRKID

Where                              
    HSD.SCANDT BETWEEN   ‘Yesterday’ and ‘Today’
) TABLEB

ON
TABLEA.TRKID = TABLEB.BAG_TRKID

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Учитывая ограниченную информацию, которой вы поделились, я смог получить ожидаемый результат с помощью следующего запроса:

SELECT a.TrkID, a.facility_number, a.bag_trkid, b.facility_number as new_facility_number 
FROM test_tbl AS a 
 LEFT JOIN test_tbl AS b ON a.bag_trkid = b.trkid OR (a.bag_trkid IS NULL AND b.trkid = a.trkid);

Вы хотите получить new_facility_number для строки на основе ее bag_trkid (которыйможет быть достигнуто этим: LEFT JOIN test_tbl AS b ON a.bag_trkid = b.trkid).НО хитрость заключается в том, чтобы учесть случаи, когда в левой таблице (которую я называю как) нет bag_trkid.В этом случае мы будем держать new_facility_number таким же, как a.facility_number, соединяя таблицы только в trkid: OR (a.bag_trkid IS NULL AND b.trkid = a.trkid)

0 голосов
/ 29 января 2019

Возможно что-то вроде

select a.TrkID, a."Facility Number", a.BAG_TRKID, b.TrkID as "NEW Fac"
from tbl a
left join tbl b on (a.TrkID = b.trk_id_reference)
...