2013-07-29 2 views
2

У меня есть таблица, которая имеет два поля позволяет говорить col1 и col2дублированные данные в противоположном столбце

DATA AS 
col1,col2 
10,age 
20,30 
30,param 
age,10 
30,20 
param,30 

Каждая строка дубликат, но в обратном порядке колонка

say 
10,age 
age,20 

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

col1,col2 
10,age 
20,30 
30,param 

только три строки будут оставлены остальными строками, будут проигнорированы в соответствии с данным сценарием

Я пробовал так много разных способов, но не могу найти решение. Так что, если любой из вас может помочь или просто обеспечить подход, то это будет большая помощь

Благодаря

+2

жаль, действительно не понимаю, что вы хотите, вы не могли бы в дальнейшем объяснить? –

+0

, но что вы хотите делать с вашими дубликатами? найти дубликаты? отфильтровать дубликаты? столбцы всегда дублируются или иногда? – Sam

+0

Благодарим за интерес, возникший после обработки запроса. В запросе выбора будет выбрано только 3 строки. Это означает, что нужно отфильтровать строки останова. –

ответ

0

не должны этого достаточно?

SELECT * 
FROM Data 
WHERE Col1 < Col2 

(если вы уверены, что каждая строка имеет дубликат пары)

3
select distinct col1,col2 from t t1 
where col1<=col2 
or not exists (select 1 from t where t.col1=t1.col2 
             and 
             t.col2=t1.col1) 

SqlFiddle demo

+0

Это хорошо, будет работать и для значений col1 = col2 http://sqlfiddle.com/#!4/b1804/1 –

+0

хорошее решение, но если у меня есть символ скажем, nvarchar datatype, например, 10 'age' и соответствующий row 'age' 10, тогда он может не работать. –

+1

@AnkitKansal. В этом случае вы должны преобразовать Col1 и Col2 в общий тип (например, VARCHAR()) при их сравнении. – valex

1

Вы можете сделать то же самое с помощью Greatest and Least

select distinct 
least("col1","col2") AS "col1" 
,greatest("col1","col2") as "col2" 
from Table1 
order by "col1" 

SQL Fiddle 1

Согласно Обновленный Вопрос SQL Fiddle 2

+0

@ AnkitKansal проверить мой ответ. это займет не меньше времени. – Luv

+0

приятная работа, но она может не работать, если тип данных берется в varchar, например, 10 'age' 'age' 10. но отличная логика ... –

+0

В этом случае вы можете использовать ** [функцию трансляции и преобразования] (http://docs.oracle.com/cd/E17952_01/refman-5.0-en/charset-convert.html) 'cast (col2 as char (50)) '** – Luv

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