在SQL中转置列

时间:2017-06-08 10:51:07

标签: sql sql-server tsql

我正在尝试采用以下数据;

|-----------------|-----------------|-----------------|
|        ID       |       Make      |       Model     |
|-----------------|-----------------|-----------------|
|        A1       |       Ford      |       Fiesta    |
|-----------------|-----------------|-----------------|
|        A2       |       Peugeot   |       106       |
|-----------------|-----------------|-----------------|

转置它以便它看起来像这样;

|-----------------|-----------------|-----------------|
|        ID       |     FieldName   |    FieldValue   |
|-----------------|-----------------|-----------------|
|        A1       |       Make      |       Ford      |
|-----------------|-----------------|-----------------|
|        A1       |       Model     |       Fiesta    |
|-----------------|-----------------|-----------------|
|        A2       |       Make      |       Peugeot   |
|-----------------|-----------------|-----------------|
|        A2       |       Model     |       106       |
|-----------------|-----------------|-----------------|

这可能在SQL中吗?

2 个答案:

答案 0 :(得分:3)

我建议使用cross apply

执行此操作
select t.id, v.*
from t cross apply
     (values ('make', t.make),
             ('model', t.model)
     ) v(fieldname, fieldvalue);

SQL Server还提供可用于此目的的unpivotunion all。但是,横向连接(apply所做的技术名称)非常强大和有效。

答案 1 :(得分:1)

你可以使用如下的unpivot:

Select * from #temp 
unpivot (fieldvalue for fieldName in([make],[model])) p