我正在尝试采用以下数据;
|-----------------|-----------------|-----------------|
| 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中吗?
答案 0 :(得分:3)
我建议使用cross apply
:
select t.id, v.*
from t cross apply
(values ('make', t.make),
('model', t.model)
) v(fieldname, fieldvalue);
SQL Server还提供可用于此目的的unpivot
和union all
。但是,横向连接(apply
所做的技术名称)非常强大和有效。
答案 1 :(得分:1)
你可以使用如下的unpivot:
Select * from #temp
unpivot (fieldvalue for fieldName in([make],[model])) p