IF(OBJECT_ID('Student') IS NOT NULL)
DROP TABLE Student
CREATE TABLE Student
(
ID INT IDENTITY(1,1) PRIMARY KEY,
Name VARCHAR(10)
)
INSERT Student
SELECT '张三' UNION
SELECT '李四' UNION
SELECT '王五'
IF(OBJECT_ID('Grade') IS NOT null)
DROP TABLE Grade
CREATE TABLE Grade
(
SID INT , --对应着 student 中的ID
SUBJECT VARCHAR(50),
VALUE INT,
order_index INT , --在行上的顺寻
flag int --是否显示
)
INSERT grade VALUES(1,'English',66,1,1)
INSERT grade VALUES(1,'Chinese',67,2,1)
INSERT grade VALUES(1,'Math',68,3,1)
INSERT grade VALUES(2,'English',63,1,1)
INSERT grade VALUES(2,'Chinese',64,2,1)
INSERT grade VALUES(2,'Math',65,3,1) SELECT * FROM Student s
SELECT * FROM Gradedeclare @s varchar(8000)
set @s='select s.id,s.name'
select @s=@s+',max(case when subject='''+subject+''' then VALUE end) '+subject
from Grade group by subject order by min(order_index )
set @s=@s+' FROM Student s left join Grade g on s.id=g.sid group by s.id,s.name '
exec(@s)MAX的作用是什么?本人不是很理解,希望大虾指教。
set @s='select s.id,s.name'
select @s=@s+',(case when subject='''+subject+''' then VALUE end) '+subject
from Grade group by subject order by min(order_index )
set @s=@s+' FROM Student s left join Grade g on s.id=g.sid'
exec(@s)