繁体   English   中英

将列值转换为列名SQL Server

[英]Convert a column values to column names SQL server

我有一个具有以下架构的表。 希望获得与SQL Server中预期结果相同的结果。 由于“值”列为字符串,因此数据透视不起作用。 请提出实现此目标的有效方法。 谢谢!

表:

 Dim Key(String) , Dim Value (String)
   AB                XY1 
   AB                XY2
   CD                XY3
   CD                XY4

预期结果

New columns=>  AB      CD
Row values =>  XY1     XY3
               XY2     XY4

您想要row_number()

select max(case when key = 'ab' then Value end) as ab, 
       max(case when key = 'cd' then Value end) as cd
from (select t.*, 
             row_number() over (partition by key order by Value) as seq
      from table t
     ) t
group by seq;

但是,您的pivot版本也应该与row_number()

编辑:

select tt.*
from (select t.*, 
             row_number() over (partition by [key] order by Value) as seq
      from table t
     ) as t pivot 
     ( max(value) for [key] in ([ab], [cd]) 
     ) tt;

自我加入应该起作用。 但是,您没有提供SQL的完整业务需求。

您期望哪个结果?

New columns=>  AB      CD
Row values =>  XY1     XY3
               XY2     XY4

要么,

New columns=>  AB      CD
Row values =>  XY1     XY4
               XY2     XY3

要么,

New columns=>  AB      CD
Row values =>  XY1     
               XY2     
                       XY3
                       XY4 

您的SQL看起来像这样,

select ab.value as "AB", cd.value as "CD"
from (select * from t where key='ab') ab
    ,(select * from t where key='cd') cd

但是上面的SQL给你这个结果,

New columns=>  AB      CD
Row values =>  XY1    XY3 
               XY2    XY3 
               XY1    XY4  
               XY2    XY4          

您应该根据需要对SQL进行一些修改。 希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM