Есть два способа спрятаться. Если не имеет значения, какое значение GRP_ID скрыто, то, возможно, вам не нужно включать столбец GRP_ID. В этом случае можно удалить столбец GRP_ID из вашей ЗЕЬЕСТ и сделать SELECT DISTINCT:
SELECT DISTINCT TermMsg.TRM_ID,
upper(TermMsg.TRM_LOCALE_CODE) as TRM_LOCALE_CODE,
TermMsg.TRM_NAME,
TermMsg.TRM_DESCRIPTION,
upper(substr(TRM_NAME,1,1)) AS LETTER,
(Term.TRM_PUBLISHED) AS PUBLISHED
FROM EPBS_DATA.GLS_TERM_LOC TermMsg, EPBS_DATA.GLS_TERM Term left join
EPBS_DATA.GLS_TERM_GROUP_ASSIGNMENT tga
on Term.TRM_ID = tga.TRM_ID
WHERE TermMsg.TRM_ID = Term.TRM_ID and TermMsg.TRM_NAME IS NOT NULL
ORDER BY TRM_NAME;
Однако, если вам действительно нужно включать, по крайней мере, какое-то значение GRP_ID, то вы могли бы использовать ROW_NUMBER() function:
SELECT q.*
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY TermMsg.TRM_ID ORDER BY tga.GRP_ID) AS ROWNUM, TermMsg.TRM_ID,
upper(TermMsg.TRM_LOCALE_CODE) as TRM_LOCALE_CODE,
TermMsg.TRM_NAME,
TermMsg.TRM_DESCRIPTION,
upper(substr(TRM_NAME,1,1)) AS LETTER,
(Term.TRM_PUBLISHED) AS PUBLISHED,
tga.GRP_ID
FROM EPBS_DATA.GLS_TERM_LOC TermMsg, EPBS_DATA.GLS_TERM Term left join
EPBS_DATA.GLS_TERM_GROUP_ASSIGNMENT tga
on Term.TRM_ID = tga.TRM_ID
WHERE TermMsg.TRM_ID = Term.TRM_ID and TermMsg.TRM_NAME IS NOT NULL
) q
WHERE q.ROWNUM = 1
ORDER BY q.TRM_NAME;
У меня нет базы данных с вашей схемой для тестирования, но я считаю, что запрос должен работать. Это довольно распространенный шаблон в Oracle, когда вам нужно удалить дубликаты, где SELECT DISTINCT не будет работать. Вы можете видеть, что ваш запрос должен быть встроен в качестве подзапроса; то внешний запрос выбирает, где ROWNUM равен 1. Ключ состоит в том, что он разбивается на столбец TRM_ID - в основном, вы PARTITION BY, какие столбцы вы хотите быть уникальными в своем конечном выпуске.
(Если вы не хотите, чтобы ROWNUM в конечной продукции, то вместо SELECT, д. * Вы можете выбрать каждый столбец, который вы хотите отдельно из подзапроса.)
Прежде чем кто-нибудь сможет ответить, как вы должны скрыть видимый дубликат, вы должны указать приемлемые критерии для скрытия дубликатов. Например, последний столбец в вашем запросе - это GRP_ID ... в случае, когда вы указали (где TRM_ID равно 16), у вас есть два разных значения GRP_ID (6 и 2). Если вы хотите удалить дубликаты, какой из этих дубликатов должен быть скрыт? Строка с идентификатором группы 6 или идентификатором группы 2? – nb1987
@ nb1987 Нет разницы. Можно скрыть любые строки, которые были – NickDevil