2014-01-02 4 views
1

У меня есть два стола с одинаковой структурой. 1,2,3 и a, b, c ... являются строками.Обработка строк в Tsql

T1 T2  
1 a     
2 b   
3 c  
    d  
    e 

Мне нужен результат, как этот

T3 
1 
a 
1 
b 
1 
c 
1 
d 
1 
e 
2 
a 
2 
b 
2 
c 
2 
d 
2 
e 
3 
a 
3 
b 
3 
c 
3 
d 
3 
e 
+0

Вам это нужно в таком порядке? –

+0

да, мне нужно в таком порядке – G10

+3

Какова цель? В основном вы ищете декартово произведение этих двух столбцов? –

ответ

1
;with cteAllColumns as (
select col1 as col 
    from YourTable 
union 
select col2 as col 
    from YourTable 
) 
select c1.col, c2.col 
from cteAllColumns c1 
    cross join cteAllColumns c2 
where c1.col < c2.col 
order by c1.col, c2.col 
+0

это создаст две колонки. – PeterRing

+1

Согласен с моей ошибкой ... :(Спасибо PeterRing .. :) –

3

Использование cross join даст вам все перестановки. Просто придерживаться, что в КТР и использовать union all набор оператора, чтобы получить их в одном столбце:

WITH cte AS (
    SELECT  t1.col AS c1, t2.col AS c2 
    FROM  t1 
    CROSS JOIN t2 
) 
SELECT c1 
FROM cte 
UNION ALL 
SELECT c2 
FROM cte 
+0

+1, отметив, что заказ не обязательно будет сохранен. (и 'UNINON' :) – StuartLC

+0

@StuartLC исправил эту опечатку, спасибо, что заметили! – Mureinik

0

Ниже будет сохранить порядок комбинаций при проекции в одну колонку:

select value 
from t1 cross join t2 
unpivot ( 
value 
for attribute in (Name1, Name2) 
) unpvt; 

SqlFiddle here