我有一个名为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
答案 0 :(得分:4)
您可以使用UNPIVOT
SELECT Name + Col AS Name,
Value
FROM YourTable UNPIVOT (Value FOR Col IN ([X], [Y], [Z])) U
答案 1 :(得分: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)
答案 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
无论如何,上面的答案是一个更好的解决方案。