none
Como usar IF ou Case para diminuir informações de uma tabela RRS feed

  • Pergunta

  • Bom dia !

       Amigos precisava de uma ajuda de vocês eu tenho a seguinte situação tenho uma tabela com as informações de extrato do caixa da minha empresa porem eu tenho uma condição de pagamento que esta indo errado para o extrato então eu precisava abater isso dele quanto fosse uma determinada condição so que são de lugares diferentes as informações 

     



    DECLARE @DATA  varchar(50) ;
    DECLARE @DATA1  varchar(50) ;

    set  @DATA = CONVERT (char, GETDATE()-1,103) ;
    set  @DATA1 = CONVERT (date, GETDATE()-1,103);

    SELECT IBETTPOPRSCTA.DESTPOPRSCTA AS c1  , 
    Flexx00151700.dbo.func_converter_moeda ( SUM (IBETDTTPRSCTA.VALDTTPRSCTA),'pt-br')AS c2


    FROM Flexx00151700.dbo.IBETDTTPRSCTA IBETDTTPRSCTA (Nolock), 
    Flexx00151700.dbo.IBETTPOPRSCTA IBETTPOPRSCTA (Nolock), 
    Flexx00151700.dbo.IBETVIAVEC IBETVIAVEC (Nolock)
    WHERE IBETTPOPRSCTA.CODEMP = IBETDTTPRSCTA.CODEMP AND 
    IBETTPOPRSCTA.CODTPOPRSCTA = IBETDTTPRSCTA.CODTPOPRSCTA AND
     IBETTPOPRSCTA.TPOPRSCTA = IBETDTTPRSCTA.TPOPRSCTA AND 
     IBETVIAVEC.CODEMP = IBETDTTPRSCTA.CODEMP AND 
     IBETVIAVEC.CODEMP = IBETTPOPRSCTA.CODEMP AND 
     IBETVIAVEC.CODVEC = IBETDTTPRSCTA.CODVEC AND 
     IBETVIAVEC.NUMVIAVEC = IBETDTTPRSCTA.NUMVIAVEC AND 
      CONVERT (date, IBETVIAVEC.DATRTNVIAVEC) = @DATA1
       and (IBETDTTPRSCTA.TPOPRSCTA<>'D')  
    GROUP BY IBETTPOPRSCTA.DESTPOPRSCTA, IBETDTTPRSCTA.TPOPRSCTA

                               

    select sum(valtotpdd) from ibetpdd pd inner join 
                               ibetviavec v on
                               pd.CODVEC=v.CODVEC and
                               pd.NUMVIAVEC=v.NUMVIAVEC 


     where codcndpgtrvd =47 and v.DATRTNVIAVEC =@data1 

    Essas são as consultas, o que eu precisava e que quando a condição fosse Nota assinada abate-se o valor de 109313,00 e acrescenta-se no boleto esse mesmo valor.

    

    
    sexta-feira, 13 de setembro de 2019 15:06

Respostas

  • O problema não esse não e que são tabelas diferentes com informações diferentes

    Na primeira consulta, a coluna DESTPOPRSCTA é um texto; qual é a coluna (e de qual tabela) que possui o código para "Boleta" e "NF Assinada"?

    ---

    Eis esboço do código:

    -- código #1 v2
    DECLARE @DATA  varchar(50) ;
    DECLARE @DATA1  varchar(50) ;
    
    set  @DATA = CONVERT (char, GETDATE()-1,103) ;
    set  @DATA1 = CONVERT (date, GETDATE()-1,103);
    
    with
    Consulta as (
    SELECT IBETTPOPRSCTA.DESTPOPRSCTA AS c1, 
           SUM (IBETDTTPRSCTA.VALDTTPRSCTA) AS c2
    
    FROM Flexx00151700.dbo.IBETDTTPRSCTA IBETDTTPRSCTA, 
         Flexx00151700.dbo.IBETTPOPRSCTA IBETTPOPRSCTA, 
         Flexx00151700.dbo.IBETVIAVEC IBETVIAVEC
    WHERE IBETTPOPRSCTA.CODEMP = IBETDTTPRSCTA.CODEMP AND IBETTPOPRSCTA.CODTPOPRSCTA = IBETDTTPRSCTA.CODTPOPRSCTA AND IBETTPOPRSCTA.TPOPRSCTA = IBETDTTPRSCTA.TPOPRSCTA AND IBETVIAVEC.CODEMP = IBETDTTPRSCTA.CODEMP AND IBETVIAVEC.CODEMP = IBETTPOPRSCTA.CODEMP AND IBETVIAVEC.CODVEC = IBETDTTPRSCTA.CODVEC AND IBETVIAVEC.NUMVIAVEC = IBETDTTPRSCTA.NUMVIAVEC AND cast (IBETVIAVEC.DATRTNVIAVEC as date) = @DATA1 and (IBETDTTPRSCTA.TPOPRSCTA<>'D')
    GROUP BY IBETTPOPRSCTA.DESTPOPRSCTA, IBETDTTPRSCTA.TPOPRSCTA ), Acerto as ( select sum(valtotpdd) as soma
    from ibetpdd pd inner join
            ibetviavec v on
                 pd.CODVEC=v.CODVEC and
                 pd.NUMVIAVEC=v.NUMVIAVEC
    )
    SELECT T1.c1,
    case when T1.c1 = 'Boleta' then (T1.c2 + T2.soma)
    when T1.c1 = 'NF Assinada' then (T1.c2 - T2.soma)
    else T1.c2 end as c2
    from Consulta as T1
    cross join Acerto as T2;
     


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como Resposta HANDERSONPAIS segunda-feira, 16 de setembro de 2019 11:29
    • Editado José Diz segunda-feira, 16 de setembro de 2019 12:06
    sexta-feira, 13 de setembro de 2019 20:05

Todas as Respostas

  • Handerson, já analisou se as junções entre as tabelas estão corretas?

    A tabela IBETVIAVEC está relacionada com a tabela IBETDTTPRSCTA mas também com a tabela IBETTPOPRSCTA; isto pode resultar em linhas repetidas e resultados inesperados.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    sexta-feira, 13 de setembro de 2019 16:53
  • O problema não esse não e que são tabelas diferentes com informações diferentes
    sexta-feira, 13 de setembro de 2019 17:32
  • O problema não esse não e que são tabelas diferentes com informações diferentes

    Na primeira consulta, a coluna DESTPOPRSCTA é um texto; qual é a coluna (e de qual tabela) que possui o código para "Boleta" e "NF Assinada"?

    ---

    Eis esboço do código:

    -- código #1 v2
    DECLARE @DATA  varchar(50) ;
    DECLARE @DATA1  varchar(50) ;
    
    set  @DATA = CONVERT (char, GETDATE()-1,103) ;
    set  @DATA1 = CONVERT (date, GETDATE()-1,103);
    
    with
    Consulta as (
    SELECT IBETTPOPRSCTA.DESTPOPRSCTA AS c1, 
           SUM (IBETDTTPRSCTA.VALDTTPRSCTA) AS c2
    
    FROM Flexx00151700.dbo.IBETDTTPRSCTA IBETDTTPRSCTA, 
         Flexx00151700.dbo.IBETTPOPRSCTA IBETTPOPRSCTA, 
         Flexx00151700.dbo.IBETVIAVEC IBETVIAVEC
    WHERE IBETTPOPRSCTA.CODEMP = IBETDTTPRSCTA.CODEMP AND IBETTPOPRSCTA.CODTPOPRSCTA = IBETDTTPRSCTA.CODTPOPRSCTA AND IBETTPOPRSCTA.TPOPRSCTA = IBETDTTPRSCTA.TPOPRSCTA AND IBETVIAVEC.CODEMP = IBETDTTPRSCTA.CODEMP AND IBETVIAVEC.CODEMP = IBETTPOPRSCTA.CODEMP AND IBETVIAVEC.CODVEC = IBETDTTPRSCTA.CODVEC AND IBETVIAVEC.NUMVIAVEC = IBETDTTPRSCTA.NUMVIAVEC AND cast (IBETVIAVEC.DATRTNVIAVEC as date) = @DATA1 and (IBETDTTPRSCTA.TPOPRSCTA<>'D')
    GROUP BY IBETTPOPRSCTA.DESTPOPRSCTA, IBETDTTPRSCTA.TPOPRSCTA ), Acerto as ( select sum(valtotpdd) as soma
    from ibetpdd pd inner join
            ibetviavec v on
                 pd.CODVEC=v.CODVEC and
                 pd.NUMVIAVEC=v.NUMVIAVEC
    )
    SELECT T1.c1,
    case when T1.c1 = 'Boleta' then (T1.c2 + T2.soma)
    when T1.c1 = 'NF Assinada' then (T1.c2 - T2.soma)
    else T1.c2 end as c2
    from Consulta as T1
    cross join Acerto as T2;
     


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como Resposta HANDERSONPAIS segunda-feira, 16 de setembro de 2019 11:29
    • Editado José Diz segunda-feira, 16 de setembro de 2019 12:06
    sexta-feira, 13 de setembro de 2019 20:05