我有一个包含此类数据的表
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 行。总计 = 对于有 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
上进行分组,从而获得所需的结果:
SELECT customerName,
caseID,
Campaign,
MAX(CASE WHEN questionID % 5 = 1 THEN answerID END) AS Q1,
MAX(CASE WHEN questionID % 5 = 2 THEN answerID END) AS Q2,
MAX(CASE WHEN questionID % 5 = 3 THEN answerID END) AS Q3,
MAX(CASE WHEN questionID % 5 = 4 THEN answerID END) AS Q4,
MAX(CASE WHEN questionID % 5 = 0 THEN answerID END) AS Q5
FROM data
GROUP BY 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
在 dbfiddle 上演示