SQL行转列怎么实现
时间: 2024-12-17 13:24:34 浏览: 3
在 SQL 中,行转列(也称为 Pivot 或 UnPivot)是一种常见的操作,它将一列或多列的数据展开到行上,以便于按新的列名分组和分析。这通常用于汇总数据,比如表格中的计数、平均值等。
以下是一个基础的例子,假设你有一个销售数据表 `sales`,其中有一列 `product` 描述产品,一列 `quantity` 记录每个产品的销售量,你想将 `quantity` 列按照产品转换成新的行:
原始表结构:
```sql
+----+---------+-------+
| id | product | quantity |
+----+---------+---------+
| 1 | A | 10 |
| 2 | B | 5 |
| 3 | C | 20 |
| 4 | A | 15 |
| 5 | B | 8 |
| 6 | D | 12 |
+----+---------+-------+
```
转换后的表结构(行转列):
```sql
+----+-------+-----+-----+-----+
| id | A | B | C | D |
+----+-------+-----+-----+-----+
| 1 | 10 | NULL| NULL| NULL|
| 2 | NULL| 5| NULL| NULL|
| 3 | NULL| NULL| 20| NULL|
| 4 | 15 | NULL| NULL| NULL|
| 5 | NULL| 8| NULL| NULL|
| 6 | NULL| NULL| NULL| 12|
+----+-------+-----+-----+-----+
```
这可以通过 `UNION ALL` 或 `PIVOT` 语法来实现,具体取决于你使用的数据库系统。例如,在 SQL Server 中,可以这样做:
```sql
SELECT *
FROM (
SELECT id, product, quantity
FROM sales
) AS source
PIVOT (
SUM(quantity)
FOR product IN ('A', 'B', 'C', 'D')
) AS pivot_table;
```
其他数据库可能有不同的函数或语法,如 PostgreSQL 使用 `CASE WHEN`。
阅读全文