第1个回答 2011-03-05
ect 只是起到赋值的作用,和set是一样的,就算两个一起运行,也不会有结果集。
exec(@sql) 将变量@sql里的字符串作为sql语句执行,这才是返回结果集的语句...
再粗略看了一下。
Select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result else 0 end) ['+Subject+']'
from (select distinct Subject from cj) as cj
这里可以理解为一个循环
select distinct Subject from cj 从成绩表里查询出不同名称的科目,有多少科目,就循环多少次。
循环依次将 sum(case Subject when '''+Subject+''' then Result else 0 end) ['+Subject+']' 这段字符串追加到@sql里。
Subject的值,是从子查询 (select distinct Subject from cj) 的结果集里取出的。
最后动态生成的语句,就是把所有的科目作为列名,把成绩列出来...