首页 > 解决方案 > 将列值转换为列名 SQL server

问题描述

我有一个具有以下架构的表。希望在 SQL Server 中获得与预期结果相同的结果。Pivot 不起作用,因为 Value 列是字符串。请提出有效的方法来实现这一目标。谢谢!

桌子:

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

预期结果

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

标签: sqlsql-servertsql

解决方案


你想要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;

推荐阅读