mysql 列转行和行转列
时间: 2024-12-23 12:11:06 浏览: 60
在MySQL中,"列转行"(也称为扁平化或广义笛卡尔积)和"行转列"(聚集或透视)是数据转换的两种常见操作。
**列转行** (Flattening/Cartesian Product):
当你想要将一行数据拆分成多行,每行包含一列的值时,可以使用`UNION ALL`或`UNION DISTINCT`,或者是`CASE`语句配合`GROUP_CONCAT`。例如,如果你有一个表,其中有一个字段包含了多个值,你想把它们变为单独的行:
```sql
SELECT id, value
FROM (
SELECT id, GROUP_CONCAT(value SEPARATOR ',') as values
FROM your_table
GROUP BY id
) subquery
LATERAL VIEW UNNEST(SPLIT_STR(values, ',', NULL, -1)) AS value;
```
**行转列** (Pivoting/Aggregation):
这是将一行数据中的某个字段的值按其他字段分组展示为新列的过程,通常用于汇总数据。在MySQL 8.0及以上版本,可以使用`CASE`语句和`PIVOT`关键字,但在早期版本中可能需要手动创建临时表或者使用间接方法。例如,统计各地区销售额:
```sql
SELECT *
FROM (
SELECT region, product, sales
FROM sales_data
) pivoted
PIVOT (
SUM(sales)
FOR product IN ('Product A', 'Product B', 'Product C')
);
```
阅读全文
相关推荐

















