MySQL Query to" flatten"或按字段透视表

时间:2018-04-05 19:48:01

标签: mysql pivot-table

我正在使用WordPress插件(formmaker)将表单提交保存在表格中。

它有idform_idelement_label(输入ID),element_value(输入值),group_id(提交& #39; s ID),date, and ip`

从另一张表中,我可以获得输入ID 输入名称

的关联

所以,我正在构建我的查询......

SELECT group_id, form_id,
  (case WHEN element_label = 1 THEN `element_value` END) first_name,
  (case WHEN element_label = 3 THEN `element_value` END) last_name,
  (case WHEN element_label = 4 THEN `element_value` END) school_email,
  (case WHEN element_label = 5 THEN `element_value` END) contact_email
FROM `wp_formmaker_submits` 

WHERE `form_id` = 12
GROUP BY group_id, form_id

出于某种原因,它适用于first_name,但其他字段为null ...

任何帮助都会非常感激!!

谢谢

1 个答案:

答案 0 :(得分:1)

您正在使用group by而不使用聚合功能,因此您有不可预测的结果 你应该使用(假的)聚合函数

  SELECT group_id, form_id,
    min((case WHEN element_label = 1 THEN `element_value` END))  first_name,
    min((case WHEN element_label = 3 THEN `element_value` END)) last_name,
    min((case WHEN element_label = 4 THEN `element_value` END)) school_email,
    min((case WHEN element_label = 5 THEN `element_value` END)) contact_email
  FROM `wp_formmaker_submits` 

  WHERE `form_id` = 12
  GROUP BY group_id, form_id

在sql中不推荐使用group by without aggregation函数,并且在最新版本的mysql和大多数DB中都不允许使用。 在这种情况下,没有受到攻击的结果的列的结果是不可预测的,这是sql引擎为这些列遇到的第一个值