【问题标题】:Mysql pivot table with non-count具有非计数的 Mysql 数据透视表
【发布时间】:2018-12-25 17:38:44
【问题描述】:

最初在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 添加预期结果

姓名、手机、电子邮件、日期、早餐、小吃、午餐、小吃 1、晚餐、小吃 2

acc1, 1234, acc1@yopmail.com,星期一,鸡蛋,薯条,米饭,苹果,面包,凝乳

acc1, 1234, acc1@yopmail.com, 星期二, 面包, - , - , - , 牛奶, -

acc2, 2345, acc2@yopmail.com,星期一,鸡蛋,薯条,米饭,苹果,面包,-

acc2, 2345, acc2@yopmail.com, 星期二, - , 凝乳, 面包, - , 牛奶, -

【问题讨论】:

    标签: mysql sql pivot-table


    【解决方案1】:

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

    【讨论】:

    • 这太棒了。只是好奇,没有办法从sql中获取不同列的多个snack吧?
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多