Oracle Выбрать уникальный для нескольких столбцов - PullRequest
0 голосов
/ 09 июля 2020

Как я могу добиться этого, чтобы выбрать одну строку только динамически, поскольку цель состоит в том, чтобы получить уникальность даже для нескольких столбцов

введите описание изображения здесь

Ответы [ 3 ]

1 голос
/ 09 июля 2020
select distinct
  coalesce(least(ColA, ColB),cola,colb) A1, greatest(ColA, ColB) B1
from T
0 голосов
/ 09 июля 2020

Если я правильно понимаю слова: цель состоит в том, чтобы получить уникальность даже для нескольких столбцов , количество столбцов может различаться, таблица может содержать 2, 3 или более столбцов.

В этом если у вас есть несколько вариантов, например, вы можете отменять сводку значений, сортировать, сводить и принимать уникальные значения. Точный код зависит от версии Oracle. Второй вариант - listagg(), но он имеет ограниченную длину, и вам следует использовать разделители, не появляющиеся в значениях.

Другой вариант - сравнить данные как коллекции. Здесь я использовал dbms_debug_vc2coll, который представляет собой простую таблицу varchars. Multiset except выполняет основную работу:

with t as (select rownum rn, col1, col2, col3,
                  sys.dbms_debug_vc2coll(col1, col2, col3) as coll 
             from test )
select col1, col2, col3 from t a
  where not exists (
    select 1 from t b where b.rn < a.rn and a.coll multiset except b.coll is empty )

dbfiddle с таблицей из 3 столбцов, нулями и различными тестами

0 голосов
/ 09 июля 2020

Лучшее решение - использовать UNION

select colA from your_table
union
select colB from your_table;

Обновить :

Если вы хотите найти дубликат, используйте EXISTS следующим образом :

SELECT COLA, COLB FROM YOUR_TABLE T1
WHERE EXISTS (SELECT 1 FROM YOUR_tABLE T2
                       WHERE T2.COLA = T1.COLB OR T2.COLB = T1.COLA)
...