mysql中行转列

1.使用case when then else end

select 
case 
when stuid=1002 then "李四"  #如果stuid=1002则结果为李四
else "不是李四"   #否则输出这个结果
end as "是否名字为李四"  #end结束标志 必须要有   将其单独作为一个字段名称
from student;  
#总的意思是  在student表中如果stuid是1002的则返回"李四",否则返回值"不是李四"

结果为:

mysql中行转列_第1张图片

 

这是原来表的数据

mysql中行转列_第2张图片

select stuid ,stunm,
Max(CASE WHEN coursenm ="大学语文" THEN scores ELSE 0  END )  as "大学语文",
Max(CASE WHEN coursenm ="新视野英语" THEN scores ELSE 0  END ) as "新视野英语",
Max(CASE WHEN coursenm ="离散数学" THEN scores ELSE 0  END ) as "离散数学",
Max(CASE WHEN coursenm ="概率论与数理统计" THEN scores ELSE 0  END ) as "概率论与数理统计",
Max(CASE WHEN coursenm ="线性代数" THEN scores ELSE 0  END ) as "线性代数",
Max(CASE WHEN coursenm ="高等数学(一)" THEN scores ELSE 0  END ) as "高等数学(一)",
Max(CASE WHEN coursenm ="高等数学(二)" THEN scores ELSE 0  END ) as "高等数学(二)"
from rowtocol
GROUP BY stuid;

mysql中行转列_第3张图片

 

---------------------------------------------------2020.4.11分割线-----------------------------------------------------------------------------------------

mysql中行转列_第4张图片

列转行:
select name,
max(case when subject="语文"
then score end)as 语文,
max(case when subject="数学"
then score end)as 数学,
max(case when subject="英语"
then score end)as 英语
from test
group by name;


行转列:
select name,语文 as score , '语文成绩' subject from test1
union
select name,数学 as score , '数学成绩' subject from test1
UNION
select name,英语 as score , '英语成绩' subject from test1;

 

原来以为可以多水一篇文章呢

你可能感兴趣的:(mysql)