Как исправить два объединения таблиц, чтобы удалить дубликаты строк - PullRequest
0 голосов
/ 29 января 2019

У меня есть 3 таблицы, и я соединил их, чтобы вывести именно то, что мне нужно, но теперь я хочу удалить дублирующиеся строки, чтобы столбец MISTI не отображал повторяющиеся записи.Я пытался использовать Distinct, но продолжаю сталкиваться с проблемами.Вот мой SQL-запрос, который работает именно так, как мне нравится, за исключением дублирования записей.Вот также снимок моего вывода

OUTPUT

SELECT  g.entity                                      AS MISTI,
        t.cur_state                                   AS STATE,
        ROUND(((SYSDATE - t.cur_state_dttm) * 24), 2) AS HRS,
        te.technician
FROM Entity_Grp_Lst    g
    LEFT OUTER JOIN
        trk_id_def        t
            ON g.facility = t.facility
               AND g.grp_type = t.grp_type
               AND g.entity = t.entity
               AND g.grp_type = '720'
    LEFT JOIN
        trk_id_technician te
            ON t.facility = te.facility
               AND t.grp_type = te.grp_type
               AND t.trk_id = te.trk_id
               AND cur_state_dttm = te.state_in_dttm
WHERE t.cur_state NOT IN ('PROD', 'NM', 'TERM', 'NULL', 'IDLE', 'YER', 'PENG', 'LBQU', 'LBQS', 'I07', '20')
        AND Entity_Grp_type = '085'
        AND g.ENTITY_GRP = 'MET'
ORDER BY g.entity,
        t.cur_state_DTTM DESC;

Ответы [ 2 ]

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

Это не дубликаты записей, значения других полей меняются.Если вам нужно сохранить отличительные значения в MISTI, вы можете сделать это:

SELECT  MISTI
        ,STATE
        ,HRS
        ,technician
FROM    (
        SELECT  g.entity                                      AS MISTI,
                t.cur_state                                   AS STATE,
                ROUND(((SYSDATE - t.cur_state_dttm) * 24), 2) AS HRS,
                te.technician
                ROW_NUMBER() over(partition by g.entity order by te.technician desc)  as rn
        FROM Entity_Grp_Lst    g
            LEFT OUTER JOIN
                trk_id_def        t
                    ON g.facility = t.facility
                       AND g.grp_type = t.grp_type
                       AND g.entity = t.entity
                       AND g.grp_type = '720'
            LEFT JOIN
                trk_id_technician te
                    ON t.facility = te.facility
                       AND t.grp_type = te.grp_type
                       AND t.trk_id = te.trk_id
                       AND cur_state_dttm = te.state_in_dttm
        WHERE t.cur_state NOT IN ('PROD', 'NM', 'TERM', 'NULL', 'IDLE', 'YER', 'PENG', 'LBQU', 'LBQS', 'I07', '20')
                AND Entity_Grp_type = '085'
                AND g.ENTITY_GRP = 'MET'
        )q
WHERE   q.rn = 1
ORDER   BY MISTI,HRS DESC

Это ранжирует строки в MISTI, и я оставляю только первую строку, вы можете изменить порядок по пункту в соответствии с вашими потребностями.

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

отличается, что он не работает, потому что у вас есть столбец, который отличается от других и является столбцом «техник», как вы можете видеть на скриншоте, который вы отправили «техник» или «часы», он отличается,так что даже если вы используете разные, это не работает, потому что в целом вся строка отличается, если есть несколько разных значений, я рекомендую удалить столбец «техник» из выбора:

Select DISTINCT
   g.entity as MISTI,
   t.cur_state      as STATE,
   ROUND(((SYSDATE-t.cur_state_dttm)*24),2) AS HRS

и попробуйте сновас отличием.

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