sql行变列的思路

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql行变列的思路相关的知识,希望对你有一定的参考价值。

已知:数据库
name lesson score
张三 语文 90
李四 数学 94
王五 英语 87
张三 数学 77
李四 语文 80
王五 数学 68

求:如何输出下面的列表(行变列)
语文 数学 英语
张三 90 94
李四 80 94
王五 68 87

答案:
select name,
(select score from t_test where name=o.name and lesson='语文') 语文,
(select score from t_test where name=o.name and lesson='数学') 数学,
(select score from t_test where name=o.name and lesson='英语') 英语
from t_test o group by name

这只是一个静态的sql语句,也就是说,语文,数学和英语这三门课程我们是假定知道的。如果不知道呢?那就只能动态的拼sql语句了。先从数据库中取这些课程然后再拼sql。

请问这里的思路是什么呢?谢谢!

在百度搜索"终极行转列",就有动态的语句写法了,这里就不写语句了,说说思路吧,
(1):利用select的逐行读取的特性,构造包含列名的SQL的字符串,例如你的答案里的(select score from t_test where name=o.name and lesson='语文') 语文
(2):然后把该字符串和select,from from t_test o group by name合并成类似你的答案中的静态SQL语句,然后执行
参考技术A 请参考这个帖子中

http://zhidao.baidu.com/question/157388436.html

我的回答

用一条查询语句将列变成行 Sqlserver

我的数据是:
1 深圳
2 上海
3 湖南
4 北京
...
我要的结果:深圳 上海 湖南 北京 只用一条Sql语句,不要用存储过程类似的
还有就是,我想在一个页面中显示出图片类似的效果
http://hi.baidu.com/%D7%ED%D6%AE%BB%EA/album/item/3c309edc61e149f077c63873.html
上面的城市都是从数据库中查询出来的,到达结尾处就自动换行(或者说限制每行的数量)(Asp.net)谢谢各位了!一定加分!!

参考技术A 上海

参考资料:上海

以上是关于sql行变列的思路的主要内容,如果未能解决你的问题,请参考以下文章

mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行)

Excel行变列,列变行技巧以及单元格换行

用一条查询语句将列变成行 Sqlserver

转载mysql行列转换方法总结

Oracle如何取出某一列的所有不重复值作为单独一列

如果查询列数超过1000行,oracle就报错,这是啥原因