数据库行列转换

 数据库中的表格:

 

 

 

 

 

 

 

要求查询出的数据:

 

 

 

 

初始化环境:

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) ;

 

下面再分别执行来看看两者区别

法一:

 

 

 

 

法二:

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值