insert into #tb select '张三','语文',82 union all select '张三','数学',76 union all select '张三','英语',67 union all select '李四','语文',75 union all select '李四','数学',54 union all select '李四','英语',73
-------查询 declare @sql varchar(8000) set @sql='' select @sql=@sql+','+[subject] from #tb group by [subject] set @sql=stuff(@sql,1,1,'') set @sql='select * from #tb pivot (max([score]) for [subject] in ('+@sql+')) a' exec(@sql) drop table #tb --------------- --结果
IF OBJECT_ID(N'Test') IS NOT NULL DROP TABLE Test GO
create table Test(id INT IDENTITY(1,1), stuname varchar(10),subject varchar(10),score int)
insert into Test select 'stone','语文',80 union all select 'stone','数学',60 union all select 'stone','英语',90 union all select '张三','语文',100 union all select '张三','数学',80 union all select '张三','英语',60
GO
-------------------------------------静态SQl-------------------------------------- SELECT stuname,MAX(CASE WHEN SUBJECT='语文' THEN score END) AS '语文' ,MAX(CASE WHEN SUBJECT='数学' THEN score END) AS '数学' ,MAX(CASE WHEN SUBJECT='英语' THEN score END) AS '英语' FROM Test GROUP BY stuname
DECLARE @Sql VARCHAR(8000) SELECT @Sql='SELECT stuname' SELECT @Sql=@Sql+',MAX(CASE SUBJECT WHEN '''+SUBJECT+''' THEN score END)'+''+SUBJECT+'' FROM (SELECT DISTINCT SUBJECT FROM dbo.Test)a SELECT @Sql=@Sql+' FROM Test GROUP BY stuname'