2016-12-22 2 views
0

У меня есть таблица, которая выглядит следующим образомПреобразование столбцов в строки для каждого ID

ID | value1 | value2 | value3 
1 | 5  | 6  | 7 
2 | 10  | 11  | 12 
3 | 20  | 21  | 22 

, что нужно, чтобы создать одну строку для каждого из 3 столбцов значений в ID. Финальный стол должен выглядеть следующим образом (заголовки столбцов не делают смысла больше, но вы можете игнорировать это):

ID | value1 | value2 
1 | value1 | 5  
1 | value2 | 6  
1 | value3 | 7  
2 | value1 | 10  
2 | value2 | 11  
2 | value3 | 12  
3 | value1 | 20  
3 | value2 | 21  
3 | value3 | 22  

Что бы лучший способ приблизиться к этому в TSQL?

ответ

4

Вы должны UNPIVOT данные, которые вы можете использовать для этого CROSS APPLY

Select Id,cs.name,cs.values_list from yourtable 
cross apply (values ('value1',value1), 
        ('value2',value2), 
        ('value3',value3)) Cs (name,values_list) 
+3

Это было быстро. Был в вашем буфере обмена? +1 –

+0

@JohnCappelletti - Nope;) Просто привык к этому;) –

+0

спасибо за быструю помощь. просто есть некоторые (надеюсь) незначительные синтаксические проблемы: откуда берутся 'name' и' values' в 'SELECT'? 'yourtable' - это название исходной таблицы? потому что он не содержит столбцов с именами 'name' и' values'. следовательно, я получаю синтаксическую ошибку. – beta

0

UNPIVOT оператора

select id,value1,value2 
from t unpivot (value2 for value1 in (value1,value2,value3)) u 
0

Вы можете использовать UNPIVOT.

Выберите ID, Vals, вал из (Select * из стека) STC UNPIVOT (значение для вальса в (значение1, значение2, Value3) ) как vals1

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