SQL-Server难题,大神们来围观吧
最近在学习列转行,在网上看了很多例子,还是没完全弄懂,自己临时建的一个表
表名tstu
name kec scores
张三 语文 98
张三 数学 23
张三 物理 89
李四 语文 89
李四 数学 56
李四 物理 57
下面的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)
现在我碰到的问题是, 我需要查询的表有很多列,我只需要其中的几列然后转换成行,用上面的方法也行不通,。。好比你把上面的表tstu再添加一列,但是添加的这一列我不需要查询出来,select*当然不对啦,
而且我要查询的是子表,是把一个子表的列转换成行,我把子表的查询语句直接替换tstu也不对。。 这是为什么呢,, 求大神详解。。。
[解决办法]
1.行转列?实际应用太少遇得到,展示技术还行,实际应该没什么大用.
2.用拼语句的方式使用行转列?效率太低了,不如好好琢磨如何建一些更优化的表.
3.除了数据库外,你不是还有你的程序设计,有些东西,用SQL不一定好,而在你用你的程序设计语言里,根本就不是个问题,基本算法而已.
[解决办法]
动态拼接sql
[解决办法]
我的意思是,先在with里面把你需要转换的3列取出来,放到一个中间集里面,然后后面的代码只对中间集操作,这样就算select *都没所谓,你试过没?