--建立测试环境 set nocount oncreate table test(A1 varchar(20),A2 varchar(20),A3 varchar(20),A4 varchar(20),A5 float)insert into test select '2006级期末考','20080101','张三','语文','101' insert into test select '2006级期末考','20080202','李四','语文','109' insert into test select '2006级期末考','20080303','王五','语文','100' insert into test select '2006级期末考','20080101','张三','数学','101' insert into test select '2006级期末考','20080202','李四','数学','85' insert into test select '2006级期末考','20080303','王五','数学','58' insert into test select '2006级期末考','20080101','张三','政治','56' insert into test select '2006级期末考','20080202','李四','政治','56' insert into test select '2006级期末考','20080303','王五','政治','50' insert into test select '2006级期末考','20080101','张三','英语','102' insert into test select '2006级期末考','20080202','李四','英语','110' insert into test select '2006级期末考','20080303','王五','英语','93' go --测试 declare @sql varchar(8000) set @sql='select A1,A2,A3' select @sql=@sql+',sum(case when A4='''+A4+''' then A5 else 0 end)['+A4+']' from (select distinct A4 from test)a set @sql=@sql+' from test group by A1,A2,A3 order by A1,A2,A3' exec(@sql) --删除测试环境 drop table test set nocount off /*-- A1 A2 A3 数学 英语 语文 政治 -------------------- -------------------- -------------------- ---------------------- ---------------------- ---------------------- ---------------------- 2006级期末考 20080101 张三 101 102 101 56 2006级期末考 20080202 李四 85 110 109 56 2006级期末考 20080303 王五 58 93 100 50 */
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8780503/viewspace-660163/ ,如需转载,请注明出处,否则将追究法律责任。