为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
倚天杖 2022-01-24 09:42:42
我有一个包含数据的表id | customerName  | Campaign questionId | answerID | caseID | 1  |   john        | Inbound | 1         | 2        | 12  |   john        | Inbound | 2         | 3        | 1 3  |   john        | Inbound | 3         | 1        | 14  |   john        | Inbound | 4         | 5        | 15  |   john        | Inbound | 5         | 4        | 16  |   john        | Outbound| 6         | 7        | 17  |   john        | Outbound| 7         | 9        | 18  |   john        | Outbound| 8         | 2        | 1   9  |   john        | Outbound| 9         | 1        | 110 |   john        | Outbound|10         | 4        | 1详细信息:一个客户可以有多个案例,每个案例可以针对每个客户进行两次调查,分别是出站和入站。这些调查共有 10 个预定义问题。出站 5 个,入站 5 个。在我目前的情况下,我能够获得如上所示的数据,每个问题和答案都有 1 行。总计 = 对于有 1 个案例和 2 个活动的客户,即 10 行。我的目标是每个客户获得 2 行,每个案例。1 行用于入站,其他用于出站。我不是在为每个问题设置重复信息的行,而是为每个问题寻找列。期望的结果:id|Name|caseId  |Campaign | Q1 | Q2 | Q3 | Q4 | Q51 |John|  1     |Outbound | 2  | 3  |1   | 5  | 42 |John|  1     |Inbound  | 7  | 9  |2   | 1  | 4   总问题:10 个预定义问题;出站调查:5 个问题 入站调查:5 个问题
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

您可以使用条件聚集执行枢轴和分组在得到你想要的结果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


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信