select a.factory,b.product,a.area,if(b.total is null,0,b.total) as total from tb_area a left join (
select factory,product,area,count(*) as total from a where DATE_FORMAT(newDate,'%Y-%m-%d') = '2020-03-26' GROUP BY factory,product,area
) b on a.area = b.area
set @sql = null;
select GROUP_CONCAT(DISTINCT concat('MAX(IF(area = ''',area,''',factory,0)) AS ''',area,'''')) into @sql from tb_area;
set @sql = concat('select factory,product,',@sql,'from a group by factory,product');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;