【问题标题】:SQL. How to take value from one column and pass It to another columnSQL。如何从一列中获取值并将其传递给另一列
【发布时间】:2016-05-30 08:24:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:
    select GroupId,   FieldName,    Value      
    from table 
    union 
    select distinct GroupId, 'username',  UserName   
    from table 
    

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 正好比我早1分半钟,你花了我多长时间才写完? @狗仔队
      • 所以,它仍然是重复的答案
      • 其实不会,UNION ALL 会表现得更好。 @狗仔队
      • 哦,对不起,差别很大
      • 虽然很小,但还是有区别的。
      【解决方案3】:
      SELECT DISTINCT t.* 
      FROM tbl
      CROSS APPLY (
          VALUES
              (GroupId, FieldName, Value),
              (GroupId, 'UserName', UserName)
      ) t(GroupId, FieldName, Value)
      

      还可以从我的post 中查看有关UNPIVOTVALUES 的小信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多