在mysql中将行值设置为列值时检查相同的ID

时间:2015-01-17 04:54:49

标签: mysql

我编写了一个mysql查询来获取多行中的行,并且列值是不同的行值。例如。我的表数据如下:

inquiry_id mailer_id    sent_on         edition  event_id  Event_name
 28           1        2015-01-14        abc        1       aaa
 28           2        2015-01-12        edf        1       aaa
 28           1        2015-01-15        pqr        2       bbb
 28           3        2015-01-17        xyz        2       bbb

我编写了一个查询来获得如下结果:

     SELECT inquiry_id, event_name,MAX(ValueData1) as ValueData1 ,MAX(ValueData2) as ValueData2
      ,MAX(ValueData3) as ValueData3
     ,MAX(ValueData4) as ValueData4
    FROM
    (
      SELECT  inquiry_id,event_id,event_name
      ,CASE WHEN mailer_id = 1 THEN CONCAT( Edition,' - ',sent_on) END AS ValueData1
      ,CASE WHEN mailer_id = 2 THEN CONCAT( Edition,' - ',sent_on) END AS ValueData2
      ,CASE WHEN mailer_id = 3 THEN CONCAT( Edition,' - ',sent_on) END AS ValueData3
     ,CASE WHEN mailer_id = 4 THEN  CONCAT( Edition,' - ',sent_on)  END AS ValueData4

      FROM crm_support_inquiry 

) AS crm_support_inquiry
GROUP BY inquiry_id,event_id,event_name

输出如下:

inquiry_id Event_name valueData1        valueData2     valueData3 valueData4
    28      aaa        abc-2015-01-14    edf-2015-01-12    null     null
    28      bbb        pqr-2015-01-15      null        xyz-2015-01-17  null

这是正确的,并且是必要的。但是如何编辑此查询以处理相同的mailer_id并在现有列中汇总数据。 我想要的样本如下: 如果假设我有一个事件有两个邮件:

inquiry_id mailer_id    sent_on         edition  event_id  Event_name
 28           1        2015-01-14        abc        1       aaa
 28           2        2015-01-12        edf        1       aaa
 28           1        2015-01-15        pqr        2       bbb
 28           3        2015-01-17        xyz        2       bbb
 28           3        2015-01-12        hdh        2       bbb

输出必须如下:

 inquiry_id Event_name valueData1        valueData2     valueData3 valueData4
    28      aaa        abc-2015-01-14    edf-2015-01-12    null     null
    28      bbb        pqr-2015-01-15      null        xyz-2015-01-17/hdh-2015-01-12  null

具有相同邮件程序ID的数据应该在同一个valuata列中作为该值汇总。如何在查询中处理?

1 个答案:

答案 0 :(得分:0)

如果我理解你想要什么,你需要改变这个:

MAX(ValueData1) as ValueData1

到此:

GROUP_CONCAT(ValueData1 SEPARATOR '/') as ValueData1

(和其他领域类似)。现场演示:http://sqlfiddle.com/#!2/88b263/3

请参阅the documentation for GROUP_CONCAT(expr), under §12.18.1 "GROUP BY (Aggregate) Functions" in the MySQL 5.7 Reference Manual