按列重新组织表数据

时间:2018-08-27 19:55:09

标签: mysql sql pivot-table

我有一个要从一种布局转换为另一种布局的数据列表。我不完全确定从一种布局转换为另一种布局的最佳方法。我曾想过一次刮一个“ cheesetype”,然后加入结果。我希望有一个更优雅的解决方案。这就是我所拥有的:

| BurgerType   | CheeseType | Slices |
|--------------|------------|--------|
| Cheeseburger | Provolone  | 2      |
| Cheeseburger | Cheddar    | 3      |
| Cheeseburger | Bleu       | 1      |
| Loosey       | Provolone  | 4      |
| Loosey       | Cheddar    | 4      |
| BlackBleu    | Bleu       | 2      |
| MONSTERNOM   | Brie       | 2      |
| MONSTERNOM   | Cheddar    | 1      |

我想将其转换为如下形式:

| BurgerType   | Provolone | Cheddar | Bleu | Brie |
|--------------|-----------|---------|------|------|
| Cheeseburger | 2         | 3       | 1    | 0    |
| Loosey       | 4         | 4       | 0    | 0    |
| BlackBleu    | 0         | 0       | 2    | 2    |
| MONSTERNOM   | 0         | 1       | 0    | 2    |

1 个答案:

答案 0 :(得分:3)

您可以使用条件聚合。当奶酪的类型匹配时,CASE仅返回切片的计数,否则返回0。然后max()会返回最大的数字,这是这种类型的奶酪和汉堡的切片数。

SELECT burgertyp,
       max(CASE
             WHEN cheesetype = 'Provolone' THEN
               slices
             ELSE
               0) provolone,
       ...
       max(CASE
             WHEN cheesetype = 'Brie' THEN
               slices
             ELSE
               0) brie
       FROM elbat
       GROUP BY burgertype;