按列重新组织表数据

fnatzsnv  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(244)

这个问题在这里已经有答案了

如何在mysql中返回pivot表输出(9个答案)
两年前关门了。
我有一个数据列表,我想从一个布局转换到另一个。我不完全确定从一种布局转换到另一种布局的最佳方式。我想过一次刮一个“奶酪类型”,然后加入结果。我希望有一个更优雅的解决方案。我得到的是:

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

yhuiod9q1#

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

相关问题