Php 如何在mysql中有条件地将行转换为列?请读正文

Php 如何在mysql中有条件地将行转换为列?请读正文,php,mysql,datatables,Php,Mysql,Datatables,我有一个表,其中包含这样的数据 id | customerName | Campaign questionId | answerID | caseID | 1 | john | Inbound | 1 | 2 | 1 2 | john | Inbound | 2 | 3 | 1 3 | john | Inbound | 3 | 1 | 1 4

我有一个表,其中包含这样的数据

id | customerName  | Campaign questionId | answerID | caseID | 
1  |   john        | Inbound | 1         | 2        | 1
2  |   john        | Inbound | 2         | 3        | 1 
3  |   john        | Inbound | 3         | 1        | 1
4  |   john        | Inbound | 4         | 5        | 1
5  |   john        | Inbound | 5         | 4        | 1
6  |   john        | Outbound| 6         | 7        | 1
7  |   john        | Outbound| 7         | 9        | 1
8  |   john        | Outbound| 8         | 2        | 1   
9  |   john        | Outbound| 9         | 1        | 1
10 |   john        | Outbound|10         | 4        | 1
详细信息:一个客户可以有多个案例,每个案例可以为每个客户进行两次调查,即出站调查和入站调查。这些调查共有10个预定义问题。5个用于出站,5个用于入站。在我目前的情况下,我能够获得如上所示的数据,每个问题和答案对应一行。总计=针对具有1个案例和2个活动(共10行)的客户。 我的目标是每个客户每个案例获得2行。1行用于入站,其他行用于出站。我没有为每个问题设置一行重复信息,而是为每个问题寻找列。 预期结果:

id|Name|caseId  |Campaign | Q1 | Q2 | Q3 | Q4 | Q5
1 |John|  1     |Outbound | 2  | 3  |1   | 5  | 4
2 |John|  1     |Inbound  | 7  | 9  |2   | 1  | 4   
总问题:10个预定义问题; 境外调查:5个问题
入站调查:5个问题

您可以使用条件聚合来执行数据透视,并根据caseID、customerName和Campaign进行分组,从而获得所需的结果:

输出:

customerName    caseID  Campaign    Q1  Q2  Q3  Q4  Q5
john            1       Inbound     2   3   1   5   4
john            1       Outbound    7   9   2   1   4

谢谢你,尼克。我已经经历了这一过程,这正是我所寻找的。然而,如果这两项调查有一个共同的问题,那就是一个小问题。让我们假设qId 4同时存在。在这种情况下,答案变为空。@MuhammedSabi,这似乎很奇怪。你能修改我的小提琴来演示这个问题吗?对不起,我的错。它很好用。结果发现我的数据集有问题。@MuhammedSabi很高兴听到这个消息。如果这确实解决了你的问题,请考虑标记答案接受在上/下投票箭头下的复选标记。看见
customerName    caseID  Campaign    Q1  Q2  Q3  Q4  Q5
john            1       Inbound     2   3   1   5   4
john            1       Outbound    7   9   2   1   4