none
Where Complicado RRS feed

  • Pergunta

  • Boa Noite!

    Amigos, estou fiz uma SQL, e o resultado dela vai ser sempre 2 datas diferentes e NULL, 

    pois bem eu preciso pegar somente o NULL e um Data Determinada.

    Vejam  a SQL 

         

    SELECT

    MES AS  MES,
    NOME, 
     SUM(FUNC.PROVENTO) AS PROVENTO,
     SUM(FUNC.DESCONTO) AS DESCONTO,
     SUM(FUNC.PROVENTO - FUNC.DESCONTO) AS LIQUIDO,
     DT


     FROM 

     (
      SELECT
       PFFINANC.MESCOMP  MES,
       PFUNC.NOME,
       ISNULL(PFFINANC.VALOR,0.00) AS PROVENTO,
       0.00 AS DESCONTO,
       PFUNC.DTTRANSFERENCIA

       FROM 
       PFUNC
       INNER JOIN PFFINANC ON PFUNC.CODCOLIGADA     = PFFINANC.CODCOLIGADA   AND PFUNC.CHAPA = PFFINANC.CHAPA
       INNER JOIN PEVENTO  ON PFFINANC.CODCOLIGADA  = PEVENTO.CODCOLIGADA    AND PFFINANC.CODEVENTO  = PEVENTO.CODIGO

       WHERE PFUNC.CODCOLIGADA= '9'

       AND   PFFINANC.ANOCOMP= '2016'
       AND   PFFINANC.NROPERIODO= '4'

       AND   PEVENTO.PROVDESCBASE='P'



       UNION ALL

        SELECT
       PFFINANC.MESCOMP MES,
       PFUNC.NOME,
       0.00 AS PROVENTO,
       ISNULL(PFFINANC.VALOR,0.00) AS DESCONTO,
       PFUNC.DTTRANSFERENCIA

       FROM 
       PFUNC
       INNER JOIN PFFINANC    ON PFUNC.CODCOLIGADA     = PFFINANC.CODCOLIGADA   AND PFUNC.CHAPA = PFFINANC.CHAPA
       INNER JOIN PEVENTO     ON PFFINANC.CODCOLIGADA  = PEVENTO.CODCOLIGADA    AND PFFINANC.CODEVENTO  = PEVENTO.CODIGO

       WHERE PFUNC.CODCOLIGADA= '9'

       AND   PFFINANC.ANOCOMP= '2016'
       AND   PFFINANC.NROPERIODO= '4'

       AND   PEVENTO.PROVDESCBASE='D'




       )

       FUNC(MES,NOME,PROVENTO,DESCONTO,DT)
    WHERE MES  = '1'

      GROUP BY MES,NOME,DT
      order by LIQUIDO

    Resultado

    Mes  Nome                                                                    Proventos   Descontos Liquidos    Dt

    1 DAMIAO GONCALVES RODRIGUES                      280.52 73.38 207.14 2016-04-01
    1 JOSE VALDINAR RIBEIRO                                      1288.01 1072.46 215.55 NULL
    1 VALDERI SANTOS QUARESMA                              856.39 483.65 372.74 2016-01-01
    1 GENIVAL BERNARDO DE OLIVEIRA                      599.78 204.87 394.91 2016-03-01
    1 AURICELIO DELMONDES DE MACEDO              599.78 199.95 399.83 2016-03-01

    Eu Tenho somente 3 condiçoes, no meu Where eu preciso somente de NULL e data 2016-01-01

    Resultado esperado

    Mes  Nome                                                                    Proventos   Descontos Liquidos    Dt

    1 JOSE VALDINAR RIBEIRO                                      1288.01 1072.46 215.55 NULL
    1 VALDERI SANTOS QUARESMA                              856.39 483.65 372.74 2016-01-01

    Obrigado Amigos

    quinta-feira, 29 de setembro de 2016 21:12

Respostas

  • Boa noite,

    Experimente fazer uns testes dessa forma para ver se é obtido o resultado esperado:

    SELECT
        PFFINANC.MESCOMP AS MES,
        PFUNC.NOME,
        SUM(CASE WHEN PEVENTO.PROVDESCBASE = 'P' THEN ISNULL(PFFINANC.VALOR, 0.00) ELSE 0 END) AS PROVENTO,
        SUM(CASE WHEN PEVENTO.PROVDESCBASE = 'D' THEN ISNULL(PFFINANC.VALOR, 0.00) ELSE 0 END) AS DESCONTO,
        SUM(ISNULL(PFFINANC.VALOR, 0.00) * CASE WHEN PEVENTO.PROVDESCBASE = 'P' THEN 1 ELSE -1 END) AS LIQUIDO,
        PFUNC.DTTRANSFERENCIA AS DT
    FROM PFUNC
    INNER JOIN PFFINANC 
        ON 
            PFUNC.CODCOLIGADA = PFFINANC.CODCOLIGADA AND 
            PFUNC.CHAPA = PFFINANC.CHAPA
    INNER JOIN PEVENTO 
        ON 
            PFFINANC.CODCOLIGADA  = PEVENTO.CODCOLIGADA AND 
            PFFINANC.CODEVENTO  = PEVENTO.CODIGO
    WHERE 
        PFUNC.CODCOLIGADA= '9' AND
        (PFUNC.DTTRANSFERENCIA IS NULL OR PFUNC.DTTRANSFERENCIA = '20160101') AND
        PFFINANC.ANOCOMP= '2016' AND
        PFFINANC.NROPERIODO = '4'
    GROUP BY
       PFFINANC.MESCOMP,
       PFUNC.NOME,
       PFUNC.DTTRANSFERENCIA

    Espero que ajude


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

    sexta-feira, 30 de setembro de 2016 00:03