行转列

行转列简析


行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。

CREATE TABLE students_score(
    cname VARCHAR(10),
    course VARCHAR(10),
    score INT(6)
);

INSERT INTO students_score VALUES
('张三','语文',74),
('张三','数学',83),
('张三','物理',93),
('李四','语文',65),
('李四','数学',87),
('李四','物理',90);
 
CREATE TABLE student(
    stu_id INT(4) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    stu_name VARCHAR(20)
);
 
INSERT INTO student(stu_name) VALUES
('张三'),('李四');

原表的输出结果如下:
行转列_第1张图片
经过行转列之后,也就是说分别合并张三和李四的四行变两行
行转列_第2张图片

SELECT cname 姓名,
MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,
MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,
MAX(CASE course WHEN '物理' THEN score ELSE 0 END ) 物理
FROM students_score
GROUP BY cname;

行转列_第3张图片

你可能感兴趣的:(行转列)