我希望使用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组合,但我无法正确格式化数据。
我希望尽可能高效地完成这项工作,因为它将不断用于格式化数据。任何帮助表示赞赏。
答案 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