WITH temptb AS(SELECT '张三' 姓名,'语文' 科目,88 分数 UNION ALL SELECT '张三' 姓名,'数学' 科目,83 分数 UNION ALL SELECT '张三' 姓名,'英语' 科目,78 分数 UNION ALL SELECT '李四' 姓名,'语文' 科目,92 分数 UNION ALL SELECT '李四' 姓名,'数学' 科目,84 分数 UNION ALL SELECT '李四' 姓名,'英语' 科目,86 分数 UNION ALL SELECT '王五' 姓名,'语文' 科目,90 分数 UNION ALL SELECT '王五' 姓名,'数学' 科目,89 分数 UNION ALL SELECT '王五' 姓名,'英语' 科目,87 分数 ) SELECT * FROM temptb 2.1 T-SQL直接转换 SELECT 姓名, SUM(CASE WHEN 科目 ='语文' THEN 分数 END) AS 语文, SUM(CASE WHEN 科目 ='数学' THEN 分数 END) AS 数学, SUM(CASE WHEN 科目 ='英语' THEN 分数 END) AS 英语 FROM temptb GROUP BY 姓名 2.2 PIVOT转换 SELECT 姓名, 语文, 数学, 英语FROM (SELECT 姓名, 科目, 分数 FROM temptb)AS D Pivot(Sum(分数) for 科目 in (语文,数学, 英语)) As P; WITH temptb AS( SELECT '张三' 姓名,88 语文,83 数学,78 英语 UNION ALL SELECT '李四' 姓名,92 语文,84 数学,86 英语 UNION ALL SELECT '王五' 姓名,90 语文,89 数学,87 英语 ) SELECT * FROM temptb 2.1 T-SQL直接转换 SELECT 姓名,科目,CASE科目 WHEN '语文' THEN[语文] WHEN '数学' THEN[数学] WHEN '英语' THEN[英语] END分数 FROM temptb CROSS JOIN(VALUES('语文'),('数学'),('英语')) AS 科目(科目) 2.2 UNPIVOT转换 SELECT姓名,科目,分数 FROMtemptb UNPIVOT(分数 FOR 科目 IN([语文],[数学],[英语])) AS U