2017-03-23 45 views
1

我有一个查询,它提供了在所有城市中加入个月明智员工的数量。 (在MySQL)将行转置为列MySQL

SELECT SUBSTR(`JoiningDate`,4,3) as Month, 
Location, 
Count(*) as `EmployeeCount` 
FROM `data` 
WHERE Location IN ('NYC','SFO','LA') 
GROUP BY Month,Location 

输出的格式如下 -

| Month|Location| Count| 
----------------------- 
| Jan | NYC | 100| 
| Jan | SFO | 500| 
| Jan | LA  | 200| 
| Feb | NYC | 100| 
| Feb | SFO | 400| 
| Feb | LA  | 500| 

我怎么能转的格式的数据,它产生列每个城市每月相关计数?类似下面 -

| Month|NYC |SFO | LA | 
----------------------- 
| Jan |100 |500 |200 | 

| Feb |100 |400 |500 | 

| Mar |300 |300 |650 | 

回答

0

可以使用条件汇总:

select SUBSTR(`JoiningDate`, 4, 3) as Month, 
    sum(location = 'NYC') as `NYC`, 
    sum(location = 'SFO') as `SFO`, 
    sum(location = 'LA') as `LA` 
from `data` 
where Location in ('NYC', 'SFO', 'LA') 
group by SUBSTR(`JoiningDate`, 4, 3) 

它使用的事实,真正的计算结果为1个假评估为0在MySQL中,你可以归纳找到所需要的计数。

+0

谢谢@ GurV,当城市名单不知道的情景如何?这意味着它不是一个有限的列表。 – Chaitanya

+0

@Chaitanya - 在这种情况下,建议在应用程序代码中处理这个问题。另一种(丑陋的)方式是使用动态SQL。 – GurV

+0

是有道理的推动逻辑到循环等应用程序更简单。谢谢! – Chaitanya