none
Count no Case RRS feed

  • Pergunta

  • Amigos boa tarde

    Preciso fazer um COUNT por situacao dos funcionarios, porem nao estou conseguindo dessa forma;

    SQL 

      SELECT CODSITUACAO FROM PFUNC WHERE CODCOLIGADA = '9' 

    Resultado 

    A            33333333

    A            33344444   

    D            55555555

    Resultado Esperado 

    Ativos = 2 

    Demitidos = 1

    Estou fazendo dessa forma 

       SELECT 

    COUNT(CASE WHEN CODSITUACAO = 'A' THEN 'Ativos' ELSE chapa END) AS 'ATIVOS'


     FROM PFUNC
      WHERE 
      CODSITUACAO IN ( 'A')
    AND
       CODCOLIGADA = '9'

    Porem eu preciso de mais condições na SQL, ai eu tentei dessa forma 

           

     SELECT 
    (F.AFASTADOPREV),
    (F.ATIVOS)

      FROM 

     (



    SELECT 

    COUNT(CASE WHEN CODSITUACAO = 'P' THEN 'Afastado Previdencia' ELSE chapa END) AS 'AFASTADOPREV',
    0   ATIVOS

     FROM PFUNC
      WHERE 
      CODSITUACAO IN ( 'P')
    AND
       CODCOLIGADA = '9'

       UNION ALL
       SELECT 
    0 AS   AFASTADOPREV,
    COUNT(CASE WHEN CODSITUACAO = 'A' THEN 'Ativos' ELSE chapa END) AS 'ATIVOS'


     FROM PFUNC
      WHERE 
      CODSITUACAO IN ( 'A')
    AND
       CODCOLIGADA = '9'

       )
       F(AFASTADOPREV,ATIVOS)

    Nao Agrupa

    Afastado              Ativos

    21              0
    0             344

    Resultado esperado

    Afastado              Ativos

    21              344

    Essa foi a forma que encontrei, porem se tiver outra melhor ainda.

    Obrigado

    segunda-feira, 17 de outubro de 2016 17:17

Respostas

  • Boa noite,

    Ronnie, segue uma outra sugestão para teste:

    SELECT 
        COUNT(CASE WHEN CODSITUACAO = 'P' THEN chapa END) AS AFASTADOPREV,
        COUNT(CASE WHEN CODSITUACAO = 'A' THEN chapa END) AS ATIVOS
    FROM PFUNC
    WHERE 
        CODCOLIGADA = '9' AND
        CODSITUACAO IN ('P', 'A')
    
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 18 de outubro de 2016 13:45
    • Marcado como Resposta Ronnie Von terça-feira, 18 de outubro de 2016 13:53
    segunda-feira, 17 de outubro de 2016 22:22

Todas as Respostas

  • Para sua query inicial

    Resultado 

    A            33333333

    A            33344444   

    D            55555555

    Resultado Esperado 

    Ativos = 2 

    Demitidos = 1

     de uma forma simples isso resolve ??

    SELECT  CASE WHEN X.CODSITUACAO = 'A' THEN 'Ativo'
                 ELSE 'Demitido'
            END AS Estatus ,
            X.Quantidade
    FROM    ( SELECT    P.CODSITUACAO ,
                        COUNT(P.CODSITUACAO) AS Quantidade
              FROM      dbo.PFUNC AS P
              GROUP BY  P.CODSITUACAO
            ) AS X;
    


    Wesley Neves


    • Sugerido como Resposta Wesley Neves segunda-feira, 17 de outubro de 2016 17:44
    • Editado Wesley Neves segunda-feira, 17 de outubro de 2016 17:45 complemento
    • Não Sugerido como Resposta Wesley Neves terça-feira, 18 de outubro de 2016 14:00
    segunda-feira, 17 de outubro de 2016 17:44
  • Boa noite,

    Ronnie, segue uma outra sugestão para teste:

    SELECT 
        COUNT(CASE WHEN CODSITUACAO = 'P' THEN chapa END) AS AFASTADOPREV,
        COUNT(CASE WHEN CODSITUACAO = 'A' THEN chapa END) AS ATIVOS
    FROM PFUNC
    WHERE 
        CODCOLIGADA = '9' AND
        CODSITUACAO IN ('P', 'A')
    
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 18 de outubro de 2016 13:45
    • Marcado como Resposta Ronnie Von terça-feira, 18 de outubro de 2016 13:53
    segunda-feira, 17 de outubro de 2016 22:22
  • Muito Obrigado funcionou dessa forma. Parabéns 

    terça-feira, 18 de outubro de 2016 13:53