将横表转为竖表,基本思想是:
1)将横表的多条数据,"压"成一条.相当于将这么多条分组,每组"压"成一条数据.利用group by
2) 再对竖表中的列,由特定行的数据填充,利用case when 'a' then 'b' else 没有用的值 end,为了过滤一些没有用的数据,常用的函数有max(), sum()
ps:如果没有聚合函数帅选.数据库会把第一个数据返回给你,基本就是刚刚你填写"没有用的值"
下面是例子:
SELECT NAME ,MAX(CASE SUBJECT when '语文' THEN Result ELSE 0 END ) 语文,
MAX(CASE SUBJECT WHEN '数学' THEN Result ELSE 0 END) 数学,
MAX(CASE SUBJECT WHEN '物理' THEN Result ELSE 0 END) 物理
from tb
GROUP BY `Name`
得到结果是