数据库行列转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库行列转换
本查询在sqlserver2008中测试通过了的
希望对大家有所帮助
数据库中的表格
要求查询出的数据:
建表:
create table studentResult(
name varchar(50),
Subject varchar(50),
Result int
)
插入数据:
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
方法二,//即科目不确定的情况下
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'
exec(@sql)
如果再插入一行
insert into studentResult values('王五','化学',60)
执行方法二(动态sql)的结果为
而方法一(静态sql)的结果为