如何将多列组合成单列?

时间:2014-02-14 13:38:24

标签: sql sql-server sql-server-2008

我有一个名为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

3 个答案:

答案 0 :(得分:4)

您可以使用UNPIVOT

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

SQL Fiddle

答案 1 :(得分:3)

您可以使用cross applyvalues

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

答案 2 :(得分: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

无论如何,上面的答案是一个更好的解决方案。