Mysql 行转列

1. 创建表:

create table tb(
ID int,
username varchar(20),
CN_SCORE float,
MATH_SCORE float,
EN_SCORE float
);

2. 插入数据:

INSERT INTO tb values(1,'lisi',87,65,75);
INSERT INTO tb values(2,'michale',78,95,81);
INSERT INTO tb values(3,'xiaocxiao',97,78,91);
INSERT INTO tb values(4,'zhangsan',80,55,75));

3. 补数据,添加个total:

 alter table tb add column total float after username;

update tb set total=(CN_SCORE+MATH_SCORE+EN_SCORE) WHERE ID IN(1,2,3,4);

或下面的形式:

UPDATE test
  SET name = CASE id
    WHEN 1 THEN 3
    WHEN 2 THEN 4
    WHEN 3 THEN 5
  END
WHERE id IN (1,2,3)

4. 开始列转行:

select username, total, '语文' COURSE, CN_SCORE as SCORE from tb
union
select username, total,'数学' COURSE, MATH_SCORE as SCORE from tb
union
select username,total, '英语' COURSE, EN_SCORE as SCORE from tb
order by username,COURSE;

ID  username total CN_SCORE  MATH_SCORE  EN_SCORE
1 lisi 227 87 65 75
2 michale 254 78 95 81
3 xiaoxiao 266 97 78 91
4 zhangsan 210 80 55 75

转换后:

username total COURSE SCORE
lisi 227 语文 87
lisi 227 英语 75
lisi 227 数学 65
michale 254 数学 95
michale 254 英语 81
michale 254 语文 78
xiaoxiao 266 语文 97
xiaoxiao 266 英语 91
xiaoxiao 266 数学 78
zhangsan 210 语文 80
zhangsan 210 英语 75
zhangsan 210 数学 55
原文地址:https://www.cnblogs.com/wujixing/p/5162821.html