不仅要行透视,还要列透视
时间: 2023-10-10 14:06:31 浏览: 86
若要实现列透视,可以使用 MySQL 的 PIVOT 功能。不幸的是,MySQL 并不直接支持 PIVOT,但可以使用 GROUP_CONCAT 和 CASE 语句来模拟 PIVOT。
例如,假设我们有一个销售记录表 Sales:
| id | date | product | price | quantity |
|----|------------|---------|-------|----------|
| 1 | 2020-01-01 | A | 10 | 2 |
| 2 | 2020-01-01 | B | 15 | 3 |
| 3 | 2020-01-02 | A | 12 | 4 |
| 4 | 2020-01-02 | C | 20 | 1 |
要按照日期分组,将产品作为列,计算每种产品在每天的销售总额,可以使用如下的 SQL 语句:
```
SELECT date,
SUM(CASE WHEN product = 'A' THEN price * quantity ELSE 0 END) AS A,
SUM(CASE WHEN product = 'B' THEN price * quantity ELSE 0 END) AS B,
SUM(CASE WHEN product = 'C' THEN price * quantity ELSE 0 END) AS C
FROM Sales
GROUP BY date;
```
执行结果:
| date | A | B | C |
|------------|---|---|---|
| 2020-01-01 | 20 | 45 | 0 |
| 2020-01-02 | 48 | 0 | 20 |
这个查询使用了多个 CASE 语句和 SUM 聚合函数来模拟 PIVOT,将产品作为列名,每个列计算特定的销售量。如果该产品在特定的日期没有销售,则为 0。
这样,我们就得到了一个简单的行列透视结果。通过更改 SELECT 子句中的列名和 CASE 语句中的条件,您可以创建不同的数据透视视图以满足不同的需求。
阅读全文