mysql将多列转化为多行
时间: 2024-11-12 10:42:50 浏览: 24
MySQL中的`UNION ALL`、`CASE`语句或`PIVOT`操作可以将多列数据转换成多行。以下是几种常见的方法:
1. **UNION ALL**:当需要合并两个或更多查询的结果集,每条记录只显示一次,并且原始的列保持不变时,可以使用`UNION ALL`。如果你需要在结果集中区分各个来源,这会很有帮助。
示例:
```sql
SELECT column1, column2
FROM table
UNION ALL
SELECT column1, 'new_column_name'
FROM another_table;
```
2. **CASE WHEN**:通过使用`CASE`表达式可以根据特定条件把一列转化为多行。例如,你可以创建一个新的虚拟列,当某个条件成立时返回非空值,否则为空。
示例:
```sql
SELECT id,
CASE
WHEN condition THEN 'value1'
ELSE 'value2'
END AS transformed_column
FROM your_table;
```
3. **PIVOT** 或 `GROUP_CONCAT` (MySQL 8.0及以上版本):`PIVOT`是一个更高级的功能,用于重塑数据表的结构,通常是沿着一列或多列进行转换。当你需要按某列分组并把其他列的数据展平到一行时,这非常有用。
示例(假设有一个销售数据表,想按产品转置销售额数据):
```sql
SELECT *
FROM (
SELECT product, sales_date, amount
FROM sales_data
) pivoted
PIVOT (
SUM(amount)
FOR sales_date IN ('2022-01-01', '2022-01-02', '2022-01-03')
);
```
阅读全文