2014-02-14 8 views
0

У меня есть таблица с именем Table1, которая выглядит как ниже одинКак объединить несколько столбцов в один столбец?

| Name | X | Y | Z | 
|------|---|---|---| 
| A | 1 | 2 | 3 | 
| B | 4 | 5 | 6 | 
| C | 7 | 8 | 9 | 

Мне нужно преобразовать таблицу выше в ниже.

| NAME | VALUE | 
|------|-------| 
| AX |  1 | 
| AY |  2 | 
| AZ |  3 | 
| BX |  4 | 
| BY |  5 | 
| BZ |  6 | 
| CX |  7 | 
| CY |  8 | 
| CZ |  9 | 

Пожалуйста, помогите мне, как это сделать. Я использую SQL Server 2008 R2

+1

вы знаете, сколько столбцов у вас есть? Действительно ли они определяются последним символом «Имя»? –

+0

Это смущает. Таким образом, ваши имена столбцов - это имя, X, Y и Z. и примеры записей: A, 1, 2, 3 ..... B, 4, 5, 6 .. и т. Д.? –

+0

Yeah right @dev_feed –

ответ

1

Если число столбцов отличаются или даже неизвестно, что это будет немного сложнее, но зная столбцы это будет работать -

INSERT INTO Table2 (Name, Value) 
SELECT [Name] + 'X', [X] 
FROM Table1 
UNION ALL 
SELECT [Name] + 'Y', [Y] 
FROM Table1 
UNION ALL 
SELECT [Name] + 'Z', [Z] 
FROM Table1 

Ответ выше, является лучшее решение в любом случае.

+1

Вам не нужно будет постоянно добавлять комментарии к своим ответам (или вопросы, если на то пошло). Если вам нужно добавить больше, ** отредактируйте ** свой пост. Вам нужно только прокомментировать свои собственные сообщения, если вы отвечаете на чужие комментарии. –

+0

Достаточно справедливо, должно быть, вероятно, добавить выше. – user1948635

4

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

SELECT Name + Col AS Name, 
     Value 
FROM YourTable UNPIVOT (Value FOR Col IN ([X], [Y], [Z])) U 

SQL Fiddle

+0

Большое спасибо. Что указывает «U» в конце? –

+0

@ user2691260 - Это обязательный псевдоним таблицы для части 'UNPIVOT'. Вы можете сделать 'SELECT U. * FROM YourTable UNPIVOT (значение FOR Col IN ([X], [Y], [Z])) U' например. –

3

Вы можете использовать cross apply и values

select T1.Name+T2.Name as Name, 
     T2.Value 
from YourTable as T1 
    cross apply(values(T1.X, 'X'), 
        (T1.Y, 'Y'), 
        (T1.Z, 'Z')) as T2(Value, Name) 

SQL Fiddle

+0

Большое спасибо. Он работает –

+0

@ user2691260, пожалуйста, примите ответ, который лучше всего подходит для вас, так что, когда другие приходят к этому вопросу с той же проблемой, они видят принятый ответ. –

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