1

我有这个查询,它有以下输出:

SELECT o.date      AS Date, 
       u.firstname AS FirstName, 
       u.lastname  AS LastName, 
       m.name      AS MealName 
FROM   catering.user u 
       LEFT JOIN catering.order o 
              ON u.iduser = o.iduser 
       LEFT JOIN catering.meal m 
              ON m.idmeal = o.idmeal 
WHERE  o.weeknumber = 37 
GROUP  BY u.firstname, 
          o.date 
ORDER  BY o.date; 

在此处输入图像描述

我需要的是编写一个查询来获得以下输出: 在此处输入图像描述

我关注了与动态数据透视查询相关的其他帖子,但 MySql 对我来说是一个新主题,我不知道如何在我的情况下使用准备好的语句?

我得到的错误信息是:

PREPARE stmt FROM @sql  Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1    

我正在使用 MySql Workbench 6.0 CE

4

1 回答 1

0
SET SESSION group_concat_max_len = 1000000;

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN firstname= ''',
      firstname,
      ''' THEN mealName END) AS ',
      firstname
    )
   )INTO @sql
FROM  
(SELECT o.date      AS Date, 
       u.firstname AS FirstName, 
       u.lastname  AS LastName, 
       m.name      AS MealName 
FROM   catering.user u 
       LEFT JOIN catering.order o 
              ON u.iduser = o.iduser 
       LEFT JOIN catering.meal m 
              ON m.idmeal = o.idmeal 
WHERE  o.weeknumber = 37 
GROUP  BY u.firstname, 
          o.date 
ORDER  BY o.date)x;



SET @sql=CONCAT('SELECT date,',@sql,' FROM
(SELECT o.date      AS Date, 
       u.firstname AS FirstName, 
       u.lastname  AS LastName, 
       m.name      AS MealName 
FROM   catering.user u 
       LEFT JOIN catering.order o 
              ON u.iduser = o.iduser 
       LEFT JOIN catering.meal m 
              ON m.idmeal = o.idmeal 
WHERE  o.weeknumber = 37 
GROUP  BY u.firstname, 
          o.date 
ORDER  BY o.date)x  
GROUP BY date');


PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

小提琴

于 2014-09-22T09:27:57.250 回答