我编写了一个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列中作为该值汇总。如何在查询中处理?
答案 0 :(得分:0)
如果我理解你想要什么,你需要改变这个:
MAX(ValueData1) as ValueData1
到此:
GROUP_CONCAT(ValueData1 SEPARATOR '/') as ValueData1
(和其他领域类似)。现场演示:http://sqlfiddle.com/#!2/88b263/3。