我正在使用 SQL-Server 2008 。如何从一列获取值并将其传递给另一列?
正如您在下面的示例数据中看到的,有4列。我需要在哪里获取列名称(在本例中为UserName
)并将其传递到FieldName
列,并将UserName
列的值传递到Value
列。
示例数据
GroupId UserName FieldName Value
1 John Smith Foo 28
1 John Smith Bar 2
1 John Smith FooBar 11
1 John Smith Bizz 22
2 Peter Jones Foo 4
2 Peter Jones Bar 13
2 Peter Jones FooBar 27
2 Peter Jones Bizz 23
期望的结果
GroupId FieldName Value
1 Foo 28
1 Bar 2
1 FooBar 11
1 Bizz 22
1 UserName John Smith
2 Foo 4
2 Bar 13
2 FooBar 27
2 Bizz 23
2 UserName Peter Jones
我怎么能实现它?使用PIVOT
?但我不确定如何将透视数据合并到现有列。你有什么想法吗?如果事情不清楚 - 问我,我会尝试提供更多细节。
答案 0 :(得分:4)
select GroupId, FieldName, Value
from table
union
select distinct GroupId, 'username', UserName
from table
答案 1 :(得分:2)
无需PIVOT
,只需要一个简单的UNION ALL
即可完成任务:
SELECT DISTINCT t.groupID,'USERNAME',t.userName
FROM YourTable t
UNION ALL
SELECT s.groupID,s.FieldName,s.Value
FROM YourTable s
答案 2 :(得分:1)
SELECT DISTINCT t.*
FROM tbl
CROSS APPLY (
VALUES
(GroupId, FieldName, Value),
(GroupId, 'UserName', UserName)
) t(GroupId, FieldName, Value)
同时查看我post
中有关UNPIVOT
和VALUES
的小信息