SQL。如何从一列获取值并将其传递给另一列

时间:2016-05-30 08:24:05

标签: sql sql-server reporting-services sql-server-2008-r2 pivot

我正在使用 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?但我不确定如何将透视数据合并到现有列。你有什么想法吗?如果事情不清楚 - 问我,我会尝试提供更多细节。

3 个答案:

答案 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

中有关UNPIVOTVALUES的小信息