mysql - 具有非计数的 Mysql 数据透视表
问题描述
最初在Query based on column values in row中询问。
我在http://sqlfiddle.com/#!9/362f1cd/2有 sqlfiddle 。
我有一个客户表,其中包含id、name、mobile、email等列,还有一个每周汇总表,其中包含id、customerid、day_of_week、type_of_food、name_of_food等列。type_of_food 列具有早餐、午餐、晚餐、蛋白质、零食等值(可以是 n 种)。
我需要的是一份报告
客户姓名、手机、电子邮件、早餐、午餐、早餐 2、点心 1、点心 2、...(最多 n 个)
Acc1,Mob1,Email1,name_of_breakfast_food,name_of_lunch_food,name_of_dinner_food,... Acc2,Mob2,Email2,name_of_breakfast_food,name_of_lunch_food,name_of_dinner_food,...
请记住,同一天可以有多种食物,例如一个帐户的 2 份早餐和 3 份小吃。
请注意,@ MySQL pivot row into dynamic number of columns的问题仅有助于获取元素的数量(type_of_food),而我需要将它们分开(以及 name_of_lunch_food 的值)以防有 2 个条目(即使是相同的类型) )。
编辑:添加基于 sqlfiddle 的预期结果
名称, 移动, 电子邮件, 一天, 早餐, 小吃, 午餐, Snack1, 晚餐, Snack2
acc1, 1234, acc1@yopmail.com,周一,鸡蛋,薯条,米饭,苹果,面包,凝乳
acc1, 1234, acc1@yopmail.com, 星期二, 面包, - , - , - , 牛奶, -
acc2, 2345, acc2@yopmail.com, 星期一, 鸡蛋, 薯条, 米饭, 苹果, 面包, -
acc2, 2345, acc2@yopmail.com, 周二, - , 凝乳, 面包, - , 牛奶, -
解决方案
我会使用group_concat
功能:
SELECT c.id, c.name, c.email, w.day_of_week,
group_concat(CASE WHEN w.type_of_food = 'Breakfast' THEN w.name_of_food END ) As breakfests,
group_concat(CASE WHEN w.type_of_food = 'Snack' THEN w.name_of_food END ) As Snacks,
group_concat(CASE WHEN w.type_of_food = 'Lunch' THEN w.name_of_food END ) As Lunches,
group_concat(CASE WHEN w.type_of_food = 'Dinner' THEN w.name_of_food END ) As Dinners
FROM customer c
JOIN weekly_report w ON c.id = w.customerid
GROUP BY c.id, c.name, c.email, w.day_of_week
演示:http ://sqlfiddle.com/#!9/362f1cd/3
| id | name | email | day_of_week | breakfests | Snacks | Lunches | Dinners |
|----|------|------------------|-------------|------------|------------------|---------|---------|
| 1 | acc1 | acc1@yopmail.com | Mon | Eggs | Fries,Apple,Curd | Rice | Bread |
| 1 | acc1 | acc1@yopmail.com | Tue | Bread | (null) | (null) | Milk |
| 2 | acc2 | acc2@yopmail.com | Mon | Eggs | Fries,Apple | Rice | Bread |
| 2 | acc2 | acc2@yopmail.com | Tue | (null) | Curd | Bread | Milk |
推荐阅读
- vba - Set a sub-form hidden field to visible, based on a check box status
- haskell - 如何将 Haskell 异常用于索引负数
- python - 使用 Pandas 更改标签行
- eclipse - Eclipse dark theme bug after uninstalling
- javascript - 防止mouseleave函数中断mouseenter
- python - Rentry to numpy 函数返回错误:float object has no attribute exp
- css - 如何在没有绝对定位的情况下将文本放在图像上
- android - 使用 Kotlin 将特征写入 BLE 设备
- python - 连接两个池化层的特征
- kubernetes - Kafka 在 Kubernetes 上的 Traefik 背后