none
Duvida sobre contar os resultados de uma consulta RRS feed

  • 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;

    sexta-feira, 9 de dezembro de 2016 17:31

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
    sexta-feira, 9 de dezembro de 2016 19:46

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

    sexta-feira, 9 de dezembro de 2016 18:08
  • Boa tarde,

     Testei, mais ainda não deu,  ainda esta retornando vazias.

     Obrigado pela ajuda !

     Att,

    sexta-feira, 9 de dezembro de 2016 18:46
  • 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
    sexta-feira, 9 de dezembro de 2016 19:46
  • 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
    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

    sexta-feira, 9 de dezembro de 2016 20:32
  • 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

    sábado, 10 de dezembro de 2016 00:42
  • Quase isso, esse ai ta me trazendo o total, preciso do total p/ filial.
    segunda-feira, 12 de dezembro de 2016 12:59