sql - 将列值转换为列名 SQL Server

标签 sql sql-server t-sql

我有一个具有以下架构的表。希望在 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 - 将列值转换为列名 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54712720/

相关文章:

c# - 如何在存储过程中将 DateTime 格式传递给 MS sql server?

mysql - 表具有一对多关系还是多对多关系?

sql - 向 Azure 数据工厂中的表添加新列

sql-server - SQL Server 中的备份如何进行?

sql - SQL 中的句号/大写字母

sql - 执行SQL遇到的问题

mysql - 使用 count() 分组

mysql - 使用外键创建表时遇到问题

c++ - SQL Server 2017 C++ ODBC 连接在 Linux 上不工作

sql-server - 更新后使用存储过程插入到同一个表中