2016-09-09 2 views
1

Предположим, что таблица выглядитSQL - возвращает все уникальные пары значений из одного столбца, для каждого значения в другом столбце

col1 col2 
---- ---- 
1 a 
2 a 
3 a 
4 b 
5 b 
6 b 

и я хочу, чтобы все пары из col1 для каждого значения в col2, означая результат должен выглядеть следующим образом:

col1a col1b col2 
---- ----- ---- 
1  2  a 
1  3  a 
2  3  a 
4  5  b 
4  6  b 
5  6  b 

Я пытался использовать

temp1 cross join temp2 where temp1.col1 < temp2.col1 order by temp1.col1, temp2.col1 

как часть полного запроса, б Это не возвращает все возможные комбинации. Также я не уверен, как написать «для каждой» части команды, как в «для каждого значения в col2, создать все пары из значения в col1». Любые рекомендации будут высоко оценены.

+0

Я потерян, как генерируются пары? – deW1

+0

Пара - это всего лишь все возможные пары двух вещей в col1, которые связаны с тем же значением в col2. Так, например, все в наборе {1,2,3} находится в col1, и все они связаны со значением 'a' в col2, поэтому пары являются {(1,2), (1,3), (2,3)} – yjc

ответ

2

Возможно, это вы что искали?

select t1.col1 as col1a, t2.col1 as col1b, t1.col2 
from t as t1 
join t as t2 on t1.col2 = t2.col2 
where t1.col1 < t2.col1 

Образец SQL Fiddle дает тот же результат, как ваш пример.

+1

Спасибо, это означает, что я пропустил условие в «join ... on », которое делает группировку на основе col2. – yjc

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