mysql 纵表转横表
时间: 2023-10-19 22:36:22 浏览: 237
mysql多表联合查询操作实例分析
纵表转横表是指将关系型数据库中的纵向存储的数据转换为横向存储的形式。在MySQL中,可以使用一些SQL语句和技巧来实现这个转换。
一种常见的方法是使用PIVOT(透视)操作来完成纵表转横表的过程。在MySQL中,没有内置的PIVOT函数,但可以借助CASE WHEN语句和聚合函数来实现类似的功能。
下面是一个示例,假设有一个名为"employees"的表,其中包含了员工的姓名、部门和工资信息:
```
CREATE TABLE employees (
id INT,
name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2)
);
INSERT INTO employees (id, name, department, salary) VALUES
(1, 'John', 'HR', 5000.00),
(2, 'Jane', 'Marketing', 6000.00),
(3, 'Mike', 'Sales', 7000.00),
(4, 'Alice', 'HR', 5500.00);
```
要将这个纵表转换为横表,以部门为列,员工姓名为行,工资为值,可以使用以下SQL查询:
```
SELECT name,
MAX(CASE WHEN department = 'HR' THEN salary ELSE NULL END) AS HR,
MAX(CASE WHEN department = 'Marketing' THEN salary ELSE NULL END) AS Marketing,
MAX(CASE WHEN department = 'Sales' THEN salary ELSE NULL END) AS Sales
FROM employees
GROUP BY name;
```
这个查询使用了CASE WHEN语句将每个部门的工资转换为对应的列,并使用了MAX函数来获取每个员工在不同部门的工资。GROUP BY子句按照员工姓名进行分组。
执行以上查询,将会得到如下结果:
```
+-------+---------+------------+-------+
| name | HR | Marketing | Sales |
+-------+---------+------------+-------+
| Alice | 5500.00 | NULL | NULL |
| Jane | NULL | 6000.00 | NULL |
| John | 5000.00 | NULL | NULL |
| Mike | NULL | NULL | 7000.00 |
+-------+---------+------------+-------+
```
以上就是使用MySQL中的SQL语句实现纵表转横表的方法之一。当然,根据具体的数据结构和需求,可能需要针对性地调整SQL语句来实现更复杂的转换。
阅读全文