2015-05-12 2 views
0

У меня есть следующий запрос:Показать Null, если счетчик равен 0

SELECT e.employeeName, DATE_FORMAT(`maintenanceDate`, "%M %Y") AS 
    Month,count(`maintenanceID`) AS Total 
    FROM `maintenance` m join employee e 
    on m.employeeID =e.employeeID 
    group by month,e.employeeID 

, который генерирует результат, как этот

employeeName Month Total 
Big    Apr-15 2 
Bar    Dec-14 1 
Big    Dec-14 1 

Могу ли я знать, как это может быть улучшить, так что запрос покажет всего 0 для каждого сотрудника, у которого нет счета в этом конкретном месяце? Например: бар будет иметь всего 0 в апреле 2015 года

+1

do right join вместо join –

ответ

0

Необходимо создать список всех сотрудников и месяцев, а затем ввести данные, которые вы хотите подсчитать. В полных списках используется cross join. Затем используйте left join, чтобы получить остальную информацию:

select e.employeeName, mon.Month, count(m.maintenanceID) AS Total 
from employee e cross join 
    (select distinct date_format(maintenanceDate, '%M %Y') as month 
     from maintenance 
    ) mon left join 
    maintenance m 
    on m.employeeID = e.employeeID and 
     date_format(m.maintenanceDate, '%M %Y') = mon.month 
group by m.month, e.employeeID; 
Смежные вопросы