首页 > 解决方案 > 具有非计数的 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, 周二, - , 凝乳, 面包, - , 牛奶, -

标签: mysqlsqlpivot-table

解决方案


我会使用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 |

推荐阅读