日期:2014-05-18  浏览次数:20528 次

sql行专列
有4个表Student,Operation,Comment,Handed 
Student表数据
学号 姓名 密码  
201013201607 qqq 111
201013201667 fgdfg 111
223123123312 xxx 111

Operation表的数据
编号 题目 内容 课程编号 教师编号 时间
151914461 课后作业 ccccccccccasdfasd 1 20103110111 2012/2/20 0:00:00
7142141717 数组练习 <p>发顺丰是的</p> 1 20103110111 2012/2/21 0:00:00

Comment表的数据
编号 评价 成绩 Handed编号
3 xxx有问题 一般 15
4 还行 良好 16
5 不好 NULL 17
6 很好 优秀 18

Handed表的数据
编号 Operation编号 学号
15 151914461 201013201607
16 151914461 201013201667
17 7142141717 201013201607
18 7142141717 201013201667


我想得出
学号 姓名 课后作业 数组练习
201013201667 fgdfg 良好 优秀
201013201607 qqq 一般 NULL
223123123312 xxx null NULL






------解决方案--------------------
中国风(Roy)写的
------解决方案--------------------
SQL code
--有4个表Student,Operation,Comment,Handed  
--Student表数据
--学号 姓名 密码   
--201013201607 qqq 111 
--201013201667 fgdfg 111 
--223123123312 xxx 111 
if OBJECT_ID('Student')is not null
drop table Student
go 
create  table Student(学号 varchar(20), 姓名 varchar(20), 密码 int  )
insert into Student values(201013201607, 'qqq' ,111 )
insert into Student values(201013201667 ,'fgdfg', 111 )
insert into Student values(223123123312, 'xxx', 111 )

--Operation表的数据
--编号 题目 内容 课程编号 教师编号 时间
--151914461 课后作业 ccccccccccasdfasd 1 20103110111 2012/2/20 0:00:00
--7142141717 数组练习 <p>发顺丰是的</p> 1 20103110111 2012/2/21 0:00:00
if OBJECT_ID('Operation')is not null
drop table Operation
go 
create  table Operation(编号 varchar(20), 题目 varchar(20), 内容 varchar(50), 课程编号 int,教师编号 varchar(20), 时间 datetime)
insert into Operation values(151914461, '课后作业' ,'ccccccccccasdfasd', 1 ,20103110111 ,'2012/2/20 0:00:00')
insert into Operation values(7142141717, '数组练习' ,'<p>发顺丰是的</p>', 1 ,20103110111 ,'2012/2/21 0:00:00')

--Comment表的数据
--编号 评价 成绩 Handed编号
--3 xxx有问题 一般 15 
--4 还行 良好 16
--5 不好 NULL 17 
--6 很好 优秀 18 

if OBJECT_ID('Comment')is not null
drop table Comment
go 
create  table Comment(编号 int,评价 varchar(20),成绩 varchar(20),Handed编号 int)
insert into Comment values(3, 'xxx有问题' ,'一般', 15 )
insert into Comment values(4, '还行', '良好' ,16)
insert into Comment values(5, '不好', 'NULL', 17 )
insert into Comment values(6, '很好', '优秀', 18 )


--Handed表的数据
--编号 Operation编号 学号
--15 151914461 201013201607
--16 151914461 201013201667
--17 7142141717 201013201607
--18 7142141717 201013201667

if OBJECT_ID('Handed')is not null
drop table Handed
go 
create  table Handed(编号 int,Operation编号 varchar(20),学号 varchar(20))
insert into Handed values(15 ,151914461 ,201013201607)
insert into Handed values(16 ,151914461 ,201013201667)
insert into Handed values(17, 7142141717, 201013201607)
insert into Handed values(18, 7142141717 ,201013201667)


--我想得出
--学号         姓名 课后作业 数组练习
--201013201667 fgdfg 良好     优秀
--201013201607 qqq   一般      NULL
--223123123312 xxx   null      NULL
 ;with ct as (
select s.学号,s.姓名,o.题目,c.成绩 from 
Student s left join Handed h on s.学号=h.学号 left join Operation o on h.Operation编号=o.编号
left join Comment c on h.编号=c.Handed编号)
select * from ct a pivot (max(成绩) for 题目 in (课后作业,数组练习 )) b


学号                   姓名                   课后作业                 数组练习
-------------------- -------------------- -------------------- --------------------
201013201667         fgdfg                良好                   优秀
201013201607         qqq                  一般                   NULL
223123123312         xxx                  NULL                 NULL

(3 行受影响)

------解决方案--------------------
SQL code
--有4个表Student,Operation,Comment,Handed  
--Student表数据
--学号