纵向变成横向
Name | Subject | Result |
---|---|---|
张三 | 语文 | 73 |
张三 | 数学 | 83 |
张三 | 物理 | 93 |
李四 | 语文 | 74 |
李四 | 数学 | 84 |
李四 | 物理 | 94 |
转换成
| 姓名 | 语文 | 数学 | 物理 | | —— | —— | —— | | 李四 | 74 | 84 | 94 | | 张三 | 73 | 83 | 93 |
建表插入数据
CREATE TABLE students (
`Name` VARCHAR (50),
`Subject` VARCHAR (50),
`Result` INT (11)
);
INSERT INTO students
VALUES
('张三', '语文', '73'),
('张三', '数学', '83'),
('张三', '物理', '93'),
('李四', '语文', '74'),
('李四', '数学', '84'),
('李四', '物理', '94');
转换语句
这里的SUM也可以用MAX替代,都是取一条数据
SELECT
`Name` AS 姓名,
SUM(
CASE `Subject`
WHEN '语文' THEN
`Result`
ELSE
0
END
) AS '语文',
SUM(
CASE `Subject`
WHEN '数学' THEN
`Result`
ELSE
0
END
) AS '数学',
SUM(
CASE `Subject`
WHEN '物理' THEN
`Result`
ELSE
0
END
) AS '物理'
FROM
students
GROUP BY
NAME
横向变成纵向
| 姓名 | 语文 | 数学 | 物理 | | —— | —— | —— | | 李四 | 74 | 84 | 94 | | 张三 | 73 | 83 | 93 |
转换成
Name | Subject | Result |
---|---|---|
张三 | 语文 | 73 |
张三 | 数学 | 83 |
张三 | 物理 | 93 |
李四 | 语文 | 74 |
李四 | 数学 | 84 |
李四 | 物理 | 94 |
建表插入数据
CREATE TABLE students_1 (
`姓名` VARCHAR (50),
`语文` VARCHAR (50),
`数学` VARCHAR (50),
`物理` VARCHAR (50)
);
INSERT INTO `students_1` (
`姓名`,
`语文`,
`数学`,
`物理`
)
VALUES
('张三', '73', '83', '93'),
('李四', '74', '84', '94');
转换语句
SELECT `姓名` AS 'Name', `语文` AS 'Subject', `语文` AS 'Result' FROM students_1 UNION
SELECT `姓名` AS 'Name', `数学` AS 'Subject', `数学` AS 'Result' FROM students_1 UNION
SELECT `姓名` AS 'Name', `物理` AS 'Subject', `物理` AS 'Result' FROM students_1
ORDER BY
`Name` DESC