2014-11-17 3 views
1

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

Вход:

Название таблицы: Test

column1 column2 column3 
    A   P  Y 
    B   P  X 
    A   Q  Z 
    C   R  Y 
    B   R  Y 

Выход:

column1 column2 column3 
    A   P   Y 
    B   Q   X 
    C   R   Z 

Здесь порядок не импортировать, но я хочу, чтобы получить уникальные значения из разных колонны.

+1

Это MySQL или MS Sql или Oracle? – danish

+1

Подпишитесь на эту ссылку для oracle https://community.oracle.com/thread/622240 – psaraj12

+0

'B Q X' вы получаете достоверные данные по такому запросу !? – goseo

ответ

2

Простейшим подходом может быть UNION всех уникальных значений в каждом столбце, как показано ниже.

SELECT DISTINCT column_name,column_value FROM 
(
    SELECT 'column1' as column_name, 
      Column1 as column_value 
    FROM test 
    UNION ALL 
    SELECT 'column2' as column_name, 
      Column2 
    FROM test 
    UNION ALL 
    SELECT 'colum3' as column_name, 
      Column3 
    FROM test 
) 
2

В оракула Вы можете использовать этот запрос:

select column1, column2, column3 
from (select rownum rw, column1 from (select distinct column1 from test)) t1 
    full outer join 
    (select rownum rw, column2 from (select distinct column2 from test)) t2 on (t2.rw = t1.rw) 
    full outer join 
    (select rownum rw, column3 from (select distinct column3 from test)) t3 on (t3.rw = t2.rw or t3.rw = t1.rw); 

ROWNUM является псевдостолбец, который дает номер строки для каждой строки.

Обратите внимание, что если столбцы имеют не равное количество уникальных значений, в некоторых строках/столбцах могут быть значения NULL.

Идея состоит в том, чтобы найти все уникальные значения в каждом столбце (3 подзапроса), присвоить номер строки каждой строке в каждом подзапросе и полностью соединить все результаты по номеру строки.

Смежные вопросы