假设有张学生成绩表(tb)如下: Name Subject Result 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 ------------------------------------------------------------------------- 想变成 姓名 语文 数学 物理 ---------- ----------- ----------- ----------- 李四 74 84 94 张三 74 83 93 我运行了 declare @sql varchar2(8000) set @sql = 'select Name as ' + '姓名' select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']' from (select distinct Subject from tb) as a set @sql = @sql + ' from tb group by name' exec(@sql) 但结果出来的是命令已成功完成。 请问怎么才能显示 姓名 语文 数学 物理 ---------- ----------- ----------- ----------- 李四 74 84 94 张三 74 83 93
给例子远比你贴代码快, SELECT name, SUM(CASE subject WHEN '语文' THEN Result ELSE 0 END), SUM(CASE subject WHEN '数学' THEN Result ELSE 0 END), SUM(CASE subject WHEN '物理' THEN Result ELSE 0 END) FROM tb GROUP BY Name