数据库中的表格:
要求查询出的数据:
初始化环境:
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) ;
下面再分别执行来看看两者区别
法一:
法二: