2015-05-20 2 views
0

У меня есть эти данные:SQL строк в повторяющихся столбцах

col1|col2|col3|col4|col5|col6|col7 
0062|date|501|text1|text1|text1|text1 
0062|date|502|text2|text2|text2|text2  
0062|date|503|text3|text3|text3|text3  
0063|date|501|text1|text1|text1|text1  
0063|date|502|text2|text2|text2|text2 
0063|date|503|text3|text3|text3|text3 

Я хотел бы иметь это так:

col1|col2|col3|col4|col5|col6|col7|col3|col4|col5|col6|col7|col3|col4|col5|col6|col7 
0062|date|501|text1|text1|text1|text1|502|text2|text2|text2|text2|503|text3|text3|text3|text3 
0063|date|501|text1|text1|text1|text1|502|text2|text2|text2|text2|503|text3|text3|text3|text3 

т.д.

Как я могу это сделать в Microsoft SQL Server 2012 с базой данных SQL Server 2008 R2?

Я думаю, что мне нужно что-то сделать с помощью поворота, но я не знаю, с чего начать.

+0

В какой базе данных? И, конечно, что вы пробовали? – plaes

+0

обновил OP. – Eric

+3

Знаете ли вы, что всегда есть три набора строк (501, 502, 503)? Или это может измениться? Если последний, то вам нужен динамический стержень, который требует использования динамического SQL. –

ответ

1

Двойной самостоятельной FULL OUTER JOIN:

select coalesce(t1.col1, t2.col1, t3.col1), 
     t1.col2, t1.col3, t1.col4, t1.col5, t1.col6, t1.col7, 
     t2.col2, t2.col3, t2.col4, t2.col5, t2.col6, t2.col7, 
     t3.col2, t3.col3, t3.col4, t3.col5, t3.col6, t3.col7 
from (select * from mytable where col3 = 501) as t1 
full outer join (select * from mytable where col3 = 502) as t2 on t1.col1 = t2.col1 
full outer join (select * from mytable where col3 = 503) as t3 on t2.col1 = t3.col1 

ANSI SQL синтаксис. Не знаю, поддерживает ли SQL Server это или нет.

+0

это работает на сервере sql 2008: http://sqlfiddle.com/#!3/ccd93/2 –

+0

Приятно слышать !!! – jarlh

+0

Вы можете сделать этот общий с помощью 'ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col3' – ughai

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