Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Possuo uma tabela que mostra o serviço de alguns técnicos. Eu tenho um SELECT que retornar a quantidade de serviços de cada técnico no intervalo de dias, exemplo:
SELECT nome_tecnico, COUNT(*) FROM _TBL_SERVICOS WHERE data BETWEEN "2015-01-01" AND "2015-01-31" GROUP BY data,nome_tecnico ORDER BY data,nome_tecnico
Até ai tudo bem, mas o problema é que se um técnico não tiver trabalhado naquele dia, ele não aparece no dia em questão. Agora preciso exibir todos os dias, com todos os técnicos, para saber se o cara faltou.
Minha solução foi usar o UNION ALL, exemplo:
SELECT COUNT(*) FROM _TBL_SERVICOS WHERE nome_tecnico = "FULANO" AND data = "2015-01-01"
UNION ALL
SELECT COUNT(*) FROM _TBL_SERVICOS WHERE nome_tecnico = "FULANO" AND data = "2015-01-02"
UNION ALL
...
SELECT COUNT(*) FROM _TBL_SERVICOS WHERE nome_tecnico = "FULANO" AND data = "2015-01-31"
UNION ALL
SELECT COUNT(*) FROM _TBL_SERVICOS WHERE nome_tecnico = "FULANO2" AND data = "2015-01-01"
UNION ALL
SELECT COUNT(*) FROM _TBL_SERVICOS WHERE nome_tecnico = "FULANO2" AND data = "2015-01-02"
UNION ALL
...
Só que o comando fica enorme. Imagina para 30 técnicos, cada técnico teria 31 selects (referentes a 31 dias) X 30 técnicos. Alguém teria alguma solução ai mais enxuta????
Desde já agradeço a atenção
Carregando comentários...