数据库中的表格:
要求查询出的数据:
初始化环境:
1、 建表:
create table studentResult(
name varchar(50),
Subject varchar(50),
Result int
)
2、 插入数据:
insert into studentResult values('张三','语文',80) ;
insert into studentResult values('张三','数学',70) ;
insert into studentResult values('张三','物理',90) ;
insert into studentResult values('李四','语文',75) ;
insert into studentResult values('李四','数学',84) ;
insert into studentResult values('李四','物理',69) ;
方法一:静态sql,即只有(数学、语文、物理)3个科目,没有其余科目
select name,
Max(case [Subject] when '数学' then result else 0 end ) 数学,
Max(case [Subject] when '语文' then result else 0 end ) 语文,
Max(case [Subject] when '物理' then result else 0 end ) 物理
from studentResult group by name;
方法二:科目不确定的情况下
--动态sql
--定义变量,sql语句长度
declare @sql varchar(8000)
--设值
set @sql='select name'
select @sql = @sql
+', max(case [Subject] when '''+Subject+'''then result else 0 end) ['+Subject+']'
from (select distinct Subject from studentResult) as a
set @sql=@sql+' from studentResult group by name'
--执行sql
exec(@sql);
如果再插入一行
insert into studentResult values('王五','化学',60) ;
下面再分别执行来看看两者区别
法一:
法二: