下面的SQL语句是我找到觉得比较简单,很实用的,可能对初学者有帮助 select* from tstu pivot(max(corde)for kec in(语文,数学,物理))a //静态SQL查询
declare @sql varchar(8000) //动态SQL查询 set @sql='' select @sql=@sql+','+kec from tstu group by kec set @sql=stuff(@sql,1,1,'') set @sql='select * from tstu pivot (max(corde) for kec in ('+@sql+'))a' exec(@sql)
大神无处不在呀,, 加个where条件来筛选?不会耶, 我还是菜鸟, 大神能否给出SQL语句? [其他解释] 又来了一位大神呀, 鸡冻。。。 你说的很对,, 转来转去的,都纠结死啦, 不过没办法,现在改数据库来不及啦,, 我只能去转啦,, 我学这个不是要展示技术,, 头都搞大啦,, [其他解释] 同样又看到你啦,,, 不过我看你连接的帖子,写的更加复杂耶,,我理解能力差没看懂 [其他解释] 2005以后的用法,仅仅是举例: declare @sql varchar(8000) //动态SQL查询 set @sql='' ;with huang as ( select 你需要的列名 from tb ) select @sql=@sql+','+kec from huang group by kec set @sql=stuff(@sql,1,1,'') set @sql='select * from huang pivot (max(corde) for kec in ('+@sql+'))a' exec(@sql)
可能我上面没表达很清楚吧,大神的这段语句跟 declare @sql varchar(8000) //动态SQL查询 set @sql='' select @sql=@sql+','+kec from tstu group by kec set @sql=stuff(@sql,1,1,'') set @sql='select * from tstu pivot (max(corde) for kec in ('+@sql+'))a' exec(@sql) 也就是我上面的效果是一样的吧,,不过我的问题是如果这个表里有很多列,但我只是要把其中的三或几列列转成行,select 星号就不行啦。
--CREATE TABLE tstu(name VARCHAR(10), kec VARCHAR(10), scores INT ,test INT) --INSERT INTO tstu --SELECT '张三', '语文' , 98,1 --UNION ALL --SELECT '张三', '数学' , 23,1 --UNION ALL --SELECT '张三', '物理' , 89,1 --UNION ALL --SELECT '李四', '语文' , 89,1 --UNION ALL --SELECT '李四', '数学' , 56,1 --UNION ALL --SELECT '李四', '物理' , 57,1
declare @sql varchar(max) set @sql=''
select NAME,kec,scores INTO #t from tstu
select @sql=@sql+','+kec from #t group by kec set @sql=stuff(@sql,1,1,'') set @sql='select * from #t pivot (max(scores) for kec in ('+@sql+'))a' --PRINT @sql exec(@sql)