Create table ta ( name varchar) , Subject varchar ( , result int) Insert into ta (Name , subject , result) values (' Zhang San ' , ' language ' , 74) Insert into ta ( Name , subject , result) values (' Zhang San ' , ' math ' , 83) insert into ta (Name , subject , result) values (' Zhang San ' , ' physical ' , 93) insert into ta (Name , subject , result) values (' John Doe ' , ' languages ' , Insert into ta (Name , subject , result) values (' John Doe ' , ' mathematics ') , 84) Insert into ta (name , subject , result) values (' John Doe ' ' physical ' , 94) goselect * from ta--static SQL, refers to subject only language, mathematics, physics, this course. select name name, max (case subject when ' language ' then result else 0 end) language, max ( case subject when ' math ' then result else 0 end) math, max (case subject when ' physical ' then result else 0 end) physical from tagroup by name--dynamic SQL, refers to subject more than language, mathematics, physics, this course. declare @sql varchar (8000) set @sql = ' select name as ' + ' name ' select @sql = @sql + ' , max (case subject when ' + Subject + ' then result else 0 end ' [' + subject + ' from (select distinct subject from ta) as aset @sql = @sql + ' from ta group by name ' EXEC (@sql)
A solution to the problem of SQLR