SQL Регистрация, исключение строк - PullRequest
0 голосов
/ 30 апреля 2020

Это, наверное, что-то действительно простое, но я не могу понять это в данный момент. В настоящее время я борюсь с удалением повторяющихся строк из моего набора данных. Ниже я добавил свой текущий результат, но меня интересуют только зеленые строки. Буду очень признателен за любую помощь / поддержку.

С наилучшими пожеланиями Ciao

Код

SELECT
d.awb_no, 
e.piece_id,
e.event_day, 
e.event_cd, 
d.calc_piece_no

FROM OPS_DW.detail AS d 

    JOIN OPS_DW.event AS e 
    ON d.rec_key = e.rec_key 

WHERE e.event_day between 20200120 and 20200125
And d.awb_no = 1568275645
AND e.event_cd In ('PD','OK')

Результат This is the Result i am getting

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Используйте DISTINCT. Это исключит повторяющиеся строки.

SELECT
d.awb_no, 
e.piece_id,
e.event_day, 
e.event_cd, 
d.calc_piece_no

FROM OPS_DW.detail AS d 

    JOIN OPS_DW.event AS e 
    ON d.rec_key = e.rec_key 

WHERE e.event_day between 20200120 and 20200125
And d.awb_no = 1568275645
AND e.event_cd In ('PD','OK');
0 голосов
/ 30 апреля 2020

Я подозреваю, что вам нужен запрос расстановки приоритетов со строками "PD", если они доступны, и в других случаях "ОК" - на основе комбинации awb_no / event_day. Если это так, один относительно простой метод использует NOT EXISTS:

WITH t as (
      SELECT d.awb_no, e.piece_id, e.event_day, e.event_cd,  d.calc_piece_no
      FROM OPS_DW.detail d JOIn
           OPS_DW.event AS e 
           ON d.rec_key = e.rec_key 
      WHERE e.event_day between 20200120 and 20200125 AND
           d.awb_no = 1568275645
           e.event_cd In ('PD','OK')
     )
SELECT t.*
FROM t
WHERE t.event_cd = 'PD' OR
      NOT EXISTS (SELECT 1
                  FROM t t2
                  WHERE t2.awb_no = t.awb_no AND
                        t2.event_day = t.event_day AND
                        t2.event_cd = 'PD' 
                 );
...