已知:数据库
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。