Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL查询中透视联接查询_Mysql_Database_Pivot - Fatal编程技术网

在MySQL查询中透视联接查询

在MySQL查询中透视联接查询,mysql,database,pivot,Mysql,Database,Pivot,我认为Pivot是我所追求的正确术语。我尝试了我的主要问题的不同变体,但没有任何运气。下面是我的基本查询的简化模式的SQL FIDLE 基本上,我有一个Responses表,用于存储对某一类型调查的响应。每个问题(度量)响应都存储为响应表中的新行。响应表中的最后一列称为response\u session,它在属于同一调查会话的每个响应旁边存储一个唯一的ID 例如,如果我回答一个3个问题的调查,那么3个回答行末尾的response\u session列将是相同的,因此要知道这些回答中的每一个都

我认为Pivot是我所追求的正确术语。我尝试了我的主要问题的不同变体,但没有任何运气。下面是我的基本查询的简化模式的SQL FIDLE

基本上,我有一个
Responses
表,用于存储对某一类型调查的响应。每个问题(度量)响应都存储为响应表中的新行。响应表中的最后一列称为
response\u session
,它在属于同一调查会话的每个响应旁边存储一个唯一的ID

例如,如果我回答一个3个问题的调查,那么3个回答行末尾的
response\u session
列将是相同的,因此要知道这些回答中的每一个都是同一个会话的一部分

以下是我目前的查询:

 SELECT T0.timestamp, T3.first_name AS 'First Name', T3.last_name AS 'Last Name', T3.email AS 'Email Address', T1.title AS 'Metric Title', T2.category AS 'Category', T0.answer AS 'Score', T0.response_session AS 'Response Session'
        FROM responses AS T0

        LEFT JOIN secondary_metrics AS T1
        ON T0.metric_id = T1.id

        LEFT JOIN default_categories AS T2
        ON T0.category = T2.id

        LEFT JOIN users AS T3
        ON T0.user = T3.user_id
您可以在上面的小提琴上看到这个查询的实际操作。我需要这个查询根据
响应\u会话返回1行。因此,响应应如下所示:

| Timestamp | First Name | Last Name | Email Address | Metric 1 Title | Metric 1 Score | Metric 2 Title | Metric 2 Score | Metric 3 Title | Metric 3 Score | Category |
正如您所能看到的,每个单独的响应都是在
响应\u会话的基础上旋转(?)向上的

如果有任何MySQL大师能为我指出正确的方向,我将永远感激

谢谢

试试这个:

select timestamp, first_name, last_name, email,
  max( case title when 'Helpful' then title end ) as 'Metric 1 Title',
  max( case title when 'Helpful' then answer end ) as 'Metric 1 Score',
  max( case title when 'Polite' then title end ) as 'Metric 2 Title',
  max( case title when 'Polite' then answer end ) as 'Metric 2 Score',
  max( case title when 'Clever' then title end ) as 'Metric 3 Title',
  max( case title when 'Clever' then answer end ) as 'Metric 3 Score',
  category
from(

SELECT 
  T0.timestamp, T3.first_name, T3.last_name,
  T3.email, T1.title, T2.category,
  T0.answer, T0.response_session
FROM responses AS T0
  LEFT JOIN secondary_metrics AS T1
    ON T0.metric_id = T1.id
  LEFT JOIN default_categories AS T2
    ON T0.category = T2.id
  LEFT JOIN users AS T3
    ON T0.user = T3.user_id
) tmp_tbl
注意:您可以将别名作为列标签包含在所需的任何其他列中


同样在

谢谢你,这已经接近完美了。我可能应该提到的是,
有帮助、有礼貌等等。
是动态的、用户可定义的。它们不是设定值。如果是这种情况,你应该使用条件来匹配特定的
标题1
分数1
等。我的意思是什么条件定义了
标题1
标题2
等。我不确定我是否理解你的意思?我的意思是,如果
有用的
等没有固定,然后,您肯定应该有另一个条件来检查并说它是
title 1
,依此类推。这些条件是什么?在查询中使用它们以获得所需的结果。