Usuário com melhor resposta
Duvida sobre contar os resultados de uma consulta

Pergunta
-
SELECT F.CHAPA AS CHAPA, F.NOME AS NOME, F.FILIAL AS FILIAL, F.SECAO AS SECAO, F.SITUACAO AS SITUACAO, V.DATA, DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) AS DIFF, 'TÓPICO 01' AS OCORRENCIA FROM ARELBATIDATRANSITOVIEW AS V LEFT JOIN vwFUNC AS F ON V.CHAPA = F.CHAPA WHERE V.BATIDA IS NOT NULL AND V.DATA BETWEEN '2016-10-01 00:00:00.000' AND '2016-10-25 00:00:00.000' AND V.CODCOLIGADA = 1 AND SEQUENCIALBATIDA IN (2,3) AND YEAR ( V.DATA ) = 2016 GROUP BY V.DATA,V.CODCOLIGADA, F.FILIAL,F.COLIGADA,F.CHAPA,F.SECAO,F.SITUACAO,F.NOME HAVING DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) < 60 AND DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) > 0;
Tenho a seguinte query acima, ela esta rodando perfeitamente, mais agora estou criando uns dashboards com a mesma,e preciso contar o resultado agrupando por filial, não estou conseguindo da logica de como fazer, pois quando tiro as informações a consulta retorna vazia, vejam abaixo como tentei:
SELECT COUNT(F.CHAPA) AS TOTAL FROM ARELBATIDATRANSITOVIEW AS V LEFT JOIN vwFUNC AS F ON V.CHAPA = F.CHAPA WHERE V.BATIDA IS NOT NULL AND V.DATA BETWEEN '2016-10-01 00:00:00.000' AND '2016-10-25 00:00:00.000' AND V.CODCOLIGADA = 1 AND SEQUENCIALBATIDA IN (2,3) AND YEAR ( V.DATA ) = 2016 GROUP BY F.FILIAL,F.CHAPA HAVING DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) < 60 AND DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) > 0;
Respostas
-
Boa tarde,
Não sei se entendi corretamente mas experimente fazer uns testes para ver se é obtido o resultado esperado:
with CTE_FUNC as ( SELECT F.CHAPA AS CHAPA, F.NOME AS NOME, F.FILIAL AS FILIAL, F.SECAO AS SECAO, F.SITUACAO AS SITUACAO, V.DATA FROM ARELBATIDATRANSITOVIEW AS V LEFT JOIN vwFUNC AS F ON V.CHAPA = F.CHAPA WHERE V.BATIDA IS NOT NULL AND V.DATA BETWEEN '2016-10-01 00:00:00.000' AND '2016-10-25 00:00:00.000' AND V.CODCOLIGADA = 1 AND SEQUENCIALBATIDA IN (2,3) GROUP BY V.DATA, V.CODCOLIGADA, F.FILIAL, F.COLIGADA, F.CHAPA, F.SECAO, F.SITUACAO, F.NOME HAVING DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) between 1 and 59 ) SELECT FILIAL, COUNT(CHAPA) AS TOTAL FROM CTE_FUNC GROUP BY FILIAL
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Antero Marques sexta-feira, 9 de dezembro de 2016 20:44
- Marcado como Resposta otaciojb segunda-feira, 12 de dezembro de 2016 12:59
Todas as Respostas
-
Fala Otaciojb,
se você colocar o cout no select voce vai receber a quantidade de filial, e você já está agrupando pelo group by.Não testei mas acho que pode te dar um norte.
Abraço.SELECT COUNT(F.CHAPA) AS TOTAL
COUNT(F.FILIAL) AS FILIAIS FROM ARELBATIDATRANSITOVIEW AS V LEFT JOIN vwFUNC AS F ON V.CHAPA = F.CHAPA WHERE V.BATIDA IS NOT NULL AND V.DATA BETWEEN '2016-10-01 00:00:00.000' AND '2016-10-25 00:00:00.000' AND V.CODCOLIGADA = 1 AND SEQUENCIALBATIDA IN (2,3) AND YEAR ( V.DATA ) = 2016 GROUP BY F.FILIAL,F.CHAPA, FILIAIS HAVING DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) < 60 AND DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) > 0
-
-
Boa tarde,
Não sei se entendi corretamente mas experimente fazer uns testes para ver se é obtido o resultado esperado:
with CTE_FUNC as ( SELECT F.CHAPA AS CHAPA, F.NOME AS NOME, F.FILIAL AS FILIAL, F.SECAO AS SECAO, F.SITUACAO AS SITUACAO, V.DATA FROM ARELBATIDATRANSITOVIEW AS V LEFT JOIN vwFUNC AS F ON V.CHAPA = F.CHAPA WHERE V.BATIDA IS NOT NULL AND V.DATA BETWEEN '2016-10-01 00:00:00.000' AND '2016-10-25 00:00:00.000' AND V.CODCOLIGADA = 1 AND SEQUENCIALBATIDA IN (2,3) GROUP BY V.DATA, V.CODCOLIGADA, F.FILIAL, F.COLIGADA, F.CHAPA, F.SECAO, F.SITUACAO, F.NOME HAVING DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) between 1 and 59 ) SELECT FILIAL, COUNT(CHAPA) AS TOTAL FROM CTE_FUNC GROUP BY FILIAL
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Antero Marques sexta-feira, 9 de dezembro de 2016 20:44
- Marcado como Resposta otaciojb segunda-feira, 12 de dezembro de 2016 12:59
-
Boa tarde,
Era isso mesmo, muito obrigado, só uma duvida, preciso fazer isso em mais consultas, mais algumas delas já começa com with por exemplo:
WITH Consulta AS ( SELECT ...
Seria ? :
with CTE_FUNC as ( WITH Consulta AS ( SELECT ..... ) SELECT FILIAL, COUNT(CHAPA) AS TOTAL FROM CTE_FUNC GROUP BY FILIAL
- Editado otaciojb sexta-feira, 9 de dezembro de 2016 20:17
-
Considerando que as 2 CTEs são necessárias experimente mais ou menos dessa forma:
WITH Consulta AS ( SELECT -- ... ), CTE_FUNC as ( SELECT -- ... ) SELECT FILIAL, COUNT(CHAPA) AS TOTAL FROM CTE_FUNC GROUP BY FILIAL
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
Vc pode trazer a quantidade na mesma query, segue uma outra abordagem
SELECT F.CHAPA AS CHAPA , F.NOME AS NOME , F.FILIAL AS FILIAL , F.SECAO AS SECAO , F.SITUACAO AS SITUACAO , V.DATA , [QuantidadeFilial] =COUNT(F.FILIAL) OVER(), DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) AS DIFF , 'TÓPICO 01' AS OCORRENCIA FROM ARELBATIDATRANSITOVIEW AS V LEFT JOIN vwFUNC AS F ON V.CHAPA = F.CHAPA WHERE V.BATIDA IS NOT NULL AND V.DATA BETWEEN '2016-10-01 00:00:00.000' AND '2016-10-25 00:00:00.000' AND V.CODCOLIGADA = 1 AND SEQUENCIALBATIDA IN ( 2, 3 ) AND YEAR(V.DATA) = 2016 GROUP BY V.DATA , V.CODCOLIGADA , F.FILIAL , F.COLIGADA , F.CHAPA , F.SECAO , F.SITUACAO , F.NOME HAVING DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) < 60 AND DATEDIFF(mi, MIN(BATIDA), MAX(BATIDA)) > 0;
Wesley Neves
-