Mysql:使用子字符串值作为列进行查询

时间:2014-06-04 09:56:56

标签: mysql

我有以下查询,任何想法如何使用子字符串值作为列显示输出?或者有更好的方法来实现这一目标吗?

select MONTHNAME(from_unixtime(t1.dateline)) AS Month, COUNT(DISTINCT(t1.ticketmaskid)) as Total 

FROM swtickets t1 JOIN swticketauditlogs t2 ON t1.ticketid = t2.ticketid 

WHERE YEAR(from_unixtime(t1.dateline)) = '2014' 

AND t1.totalreplies > 0 AND FIND_IN_SET(t1.departmenttitle, 'Sales') 

AND t2.actionmsg RLIKE 'Email Queue: sales@(abc\.com\.(ph|in)|def.com)' 

GROUP BY Month 

ORDER BY MONTH(from_unixtime(t1.dateline));

输出:

+----------+-------+
| Month    | Total |
+----------+-------+
| January  |   103 |
| February |   102 |
| March    |   124 |
| April    |   105 |
| May      |   123 |
| June     |    12 |
+----------+-------+

我想要以下输出:

+----------+-----------------------------------------------------+
| Month    | sales@abc.com.ph | sales@abc.com.in | sales@def.com |
+----------+------------------+------------------+---------------+
| January  |   10             |     3            |               |
| February |   10             |     4            |               |
| March    |   12             |     4            |               |
| April    |   10             |     56           |               |
| May      |   12             |     5            |               |
| June     |   10             |     5            |               |
+----------+------------------+------------------+---------------+

1 个答案:

答案 0 :(得分:0)

我设法解决了它,但我不认为这是最好的方法。如果有更好的方法可以让我知道。

SELECT MONTHNAME(M) AS Month, 
COUNT(case when Email = 'sales@abc.com.ph' then Email end) AS 'sales@abc.com.ph', 
COUNT(case when Email = 'sales@abc.com.in' then Email end) AS 'sales@abc.com.in, 
COUNT(case when Email = 'sales@def.com' then Email end) AS 'sales@def.com' 
FROM (SELECT DISTINCT(t1.ticketmaskid), 
from_unixtime(t1.dateline) AS M, 
SUBSTRING_INDEX(t2.actionmsg, 'Email Queue: ', -1) AS Email 
FROM swtickets t1 JOIN swticketauditlogs t2 ON t1.ticketid = t2.ticketid 
WHERE YEAR(from_unixtime(t1.dateline)) = '2014' 
AND t1.totalreplies > 0 
AND FIND_IN_SET(t1.departmenttitle, 'Sales') 
AND t2.actionmsg RLIKE 'Email Queue: sales@(abc\.com\.(ph|in)|def.com)') a 
GROUP BY Month ORDER BY MONTH(M);