Mysql 按列重新组织表数据

Mysql 按列重新组织表数据,mysql,sql,pivot-table,Mysql,Sql,Pivot Table,我有一个要从一个布局转换到另一个布局的数据列表。我不完全确定从一种布局转换到另一种布局的最佳方式。我曾想过一次刮一个“奶酪类型”,然后加入结果。我希望有一个更优雅的解决方案。以下是我得到的: | BurgerType | CheeseType | Slices | |--------------|------------|--------| | Cheeseburger | Provolone | 2 | | Cheeseburger | Cheddar | 3

我有一个要从一个布局转换到另一个布局的数据列表。我不完全确定从一种布局转换到另一种布局的最佳方式。我曾想过一次刮一个“奶酪类型”,然后加入结果。我希望有一个更优雅的解决方案。以下是我得到的:

| 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    |

您可以使用条件聚合。
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;

欢迎来到Stackoverflow!我相信您正在寻找一个
支点
。认真检查应用程序代码中数据显示的处理问题