将匹配的行转换为SQL Server

时间:2016-05-13 16:27:28

标签: sql tsql

我希望使用SQL WITHOUT使用pivot或动态SQL将行值转换为列。 (我们使用的数据库不支持这些。)

这将是示例数据:

Id   ColumnName   Value
100  FirstName    Ted
100  LastName     Bundy
100  EmployeeID   4333
101  FirstName    John
101  LastName     Snow
101  EmployeeID   4177

我想将此数据转换为以下结构:

ID   FirstName    LastName    EmployeeID
100  Ted          Bundy       4333
101  John         Snow        4177

还会有比2更多的ID,但这是一般的想法。我已尝试在Efficiently convert rows to columns in sql server中使用所有解决方案,但解决方案仅适用于1条记录。另外,我尝试了很多JOINS组合,但我无法正确格式化数据。

我希望尽可能高效地完成这项工作,因为它将不断用于格式化数据。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以使用条件聚合来执行此操作,这是标准的ANSI SQL:

SELECT Id,
       MAX(CASE WHEN ColumnName = 'FirstName' THEN Value END) AS FirstName,
       MAX(CASE WHEN ColumnName = 'LastName' THEN Value END) AS LastName,
       MAX(CASE WHEN ColumnName = 'EmployeeID' THEN Value END) AS EmployeeID    
FROM mytable
GROUP BY Id

Demo here