sql - 转置数据以创建表

标签 sql sql-server sql-server-2012

我有一个包含三列的表:- name、col1、col2

我需要创建另一个表,其中 col1 作为列,col2 作为值。有人可以给我一个主意吗?

这是来源:

Name      col1         col2
details   Company      Microsoft
details   Employees    300
details   City         New York
details2  Company      Apple
details2  Employees    450
details2  City         Boston

我需要一张表格来记录这样的详细信息

Company    Employees    City
Microsoft  300          NewYork

还有另一个详细信息表2,如下所示:

  Company    Employees    City
    Apple      450          Boston

最佳答案

您可以像这样将第一列值转换为表列,将第二列值转换为行

第一种方法:- SAMPLE SQL FIDDLE

Select    
 MAX(case when col1 = 'Company' then col2 end) Company,   
 MAX(case when col1 = 'Employee' then col2 end) Employee,   
 MAX(case when col1 = 'City' then col2 end) City 
From test 
Group By name

编辑

第二种方法:- SQL FIDDLE

DECLARE @QUERY NVARCHAR(MAX), @Soucecolumn VARCHAR(MAX)
SET @Soucecolumn = STUFF((SELECT distinct ',[' + [col1 ] + ']' FROM test FOR XML PATH('')),1,1,'')
SET @QUERY = 'SELECT ' + @Soucecolumn + ' FROM test PIVOT (MAX(col2) FOR [col1 ] IN (' + @Soucecolumn + ')) AS pvt'
exec sp_executesql  @QUERY

关于sql - 转置数据以创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156798/

相关文章:

sql-server - 发现重复时将字符附加到字符串

sql-server - 有没有一种方法可以在不使用 SQL Server 中的 ComputerName 的情况下连接 LOCALHOST?

sql - 选择查询的问题

mysql - 如何在MySql中使用group by查询非聚合列?

java - 如何为 'x' 的第 n 列设置列名

sql - 如何用双单引号搜索字符串(sql)

mysql - MySQL中的空IN子句参数列表

mysql - 如何将结果从一行链接到同一张表上的另一行

SQL 服务器 : error conversion of a varchar data type

sql-server - 在 SQL Server 中为两个不同的 "after insert"触发器设置优先级