帮忙分析 一段 SQL

来源:百度知道 编辑:UC知道 时间:2024/05/19 20:20:56
declare @sql varchar(4000)
set @sql = 'select 姓名'
select @sql = @sql + ',sum(case 学科 when '''+学科+''' then 成绩 end) as '+学科
from (select distinct 学科 from CJ) as a
set @sql = @sql+' from cj group by 姓名'
exec(@sql)

谁能我分析一下这段SQL 每个步骤的作用,特别是中间那句

declare @sql varchar(4000) 定义了一个字符变量 sql
set @sql = 'select 姓名' 赋值不说了

select @sql = @sql + ',sum(case 学科 when '''+学科+''' then 成绩 end) as '+学科
from (select distinct 学科 from CJ) as a
这一句拼出来一个字符串类此如下
假如 表cj中 学科 字段有以下两种取值 物理 数学
select 姓名 ,sum(case 学科 when '物理' then 成绩 end) as 物理,sum(case 学科 when '数学'then 成绩 end) as 数学

set @sql = @sql+' from cj group by 姓名'
在以上语句拼出的sql后加上 from cj group by 姓名

exec(@sql)

执行以上拼出的sql语句

这个语句的意思是把行变成列

比如
cj表这样设计
姓名 学科 成绩
张三 物理 34
张三 数学 98
经过上述语句后
变成
姓名 物理 数学
张三 34 98