我有一个要从一种布局转换为另一种布局的数据列表。我不完全确定从一种布局转换为另一种布局的最佳方法。我曾想过一次刮一个“ 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 |
答案 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;